如何覆盖 spring xml 配置中的 parent 方法?
How to override parent method in spring xml configuration?
出于某种原因,我的团队使用 spring XML 配置而不是 Java 配置。当我实施新的 CorsFilter
时,我用谷歌搜索并找到了示例 Java 配置,如下所示:
@Component
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(final HttpServletRequest request,
final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response
.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, HEAD, OPTIONS");
response.addHeader("Access-Control-Allow-Headers",
"Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
response.addHeader("Access-Control-Expose-Headers",
"Access-Control-Allow-Origin, Access-Control-Allow-Credentials");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addIntHeader("Access-Control-Max-Age", 10);
filterChain.doFilter(request, response);
}
}
但是如何转换成等价的SpringXML配置呢?我知道我们可以创建一个名为 corsFilter
的 bean 并设置一些 属性 值。但是如何覆盖 parent 方法并在 XML 配置中执行具有副作用的操作? (比如在上面添加 headers)
如果你想移动springxml里面的所有header配置,你可以在xml里创建一个Map
对象,然后设置为[=19] =] 到 CorsFilter
并在 doFilterInternal
方法中读取相同的内容。
//add a spring util namespace xmlns:util="http://www.springframework.org/schema/util
//schemaLocation http://www.springframework.org/schema/util
<util:map id="headerMap" map-class="java.util.HashMap">
<entry key="Access-Control-Allow-Origin">
<value>*</value>
</entry> ....so on
</util:map>
<bean id="corsFilter" class="CorsFilter">
<property name="header" ref="headerMap"/>
</bean>
public class CorsFilter extends OncePerRequestFilter {
Map<String,String> header;
@Override
protected void doFilterInternal(final HttpServletRequest request,
final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
for(Entry<String,String> entry : header.entrySet()){
response.addHeader(entry.getKey(), entry.getValue());
}
filterChain.doFilter(request, response);
}
}
出于某种原因,我的团队使用 spring XML 配置而不是 Java 配置。当我实施新的 CorsFilter
时,我用谷歌搜索并找到了示例 Java 配置,如下所示:
@Component
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(final HttpServletRequest request,
final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response
.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, HEAD, OPTIONS");
response.addHeader("Access-Control-Allow-Headers",
"Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
response.addHeader("Access-Control-Expose-Headers",
"Access-Control-Allow-Origin, Access-Control-Allow-Credentials");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addIntHeader("Access-Control-Max-Age", 10);
filterChain.doFilter(request, response);
}
}
但是如何转换成等价的SpringXML配置呢?我知道我们可以创建一个名为 corsFilter
的 bean 并设置一些 属性 值。但是如何覆盖 parent 方法并在 XML 配置中执行具有副作用的操作? (比如在上面添加 headers)
如果你想移动springxml里面的所有header配置,你可以在xml里创建一个Map
对象,然后设置为[=19] =] 到 CorsFilter
并在 doFilterInternal
方法中读取相同的内容。
//add a spring util namespace xmlns:util="http://www.springframework.org/schema/util
//schemaLocation http://www.springframework.org/schema/util
<util:map id="headerMap" map-class="java.util.HashMap">
<entry key="Access-Control-Allow-Origin">
<value>*</value>
</entry> ....so on
</util:map>
<bean id="corsFilter" class="CorsFilter">
<property name="header" ref="headerMap"/>
</bean>
public class CorsFilter extends OncePerRequestFilter {
Map<String,String> header;
@Override
protected void doFilterInternal(final HttpServletRequest request,
final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
for(Entry<String,String> entry : header.entrySet()){
response.addHeader(entry.getKey(), entry.getValue());
}
filterChain.doFilter(request, response);
}
}