簡體   English   中英

Spring 4中的屬性,類中的@Value從GenericFilterBean擴展而來

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM