[英]Properties in Spring 4 with @Value in class extended from GenericFilterBean
好。 所以問題是當我在調試模式下運行應用程序時,它確實進入setter for enabled
並且設置為false,但是當調用doFilter
時, enabled
始終為true。
為清楚起見,我刪除了一些評論;-)。
public class CorsFilter extends GenericFilterBean {
private String allowedOrigins = "^(https?://([a-zA-Z][a-zA-Z0-9\\-]*\\.)?(local|localhost)(:[0-9]+)?$";
private boolean enabled = true;
@Value("${cors.enabled}")
public void setEnabled(String enabled) {
if (enabled != null) {
this.enabled = enabled.matches("^[ \\t]*(true|1|yes)[ \\t]*$");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
if (isEnabled()) {
HttpServletResponse res = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
String requestOrigin = req.getHeader("Origin");
// ignore when origin empty or not given or not matched
if (requestOrigin != null && !requestOrigin.isEmpty() && requestOrigin.matches(getAllowedOrigins())) {
res.addHeader("Access-Control-Allow-Origin", requestOrigin);
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Headers", "Accept,Authorization,Origin,Content-type");
}
}
chain.doFilter(request, response);
}
public String getAllowedOrigins() {
return allowedOrigins;
}
public boolean isEnabled() {
return enabled;
}
}
在beans.xml中:
<bean id="CorsFilter" class="saas.web.filter.CorsFilter" />
在屬性文件中:
cors.enabled=false
在web.xml中
<!-- CORS -->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>saas.web.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Web應用程序使用的實際過濾器將不是當前配置中由spring創建的過濾器。 您必須使用DelegatingFilterProxy來使用spring創建的bean。
如下更改web.xml文件中的過濾器可能會起到作用:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.