簡體   English   中英

將Filter bean添加到ServletContext

[英]Add Filter bean to ServletContext

我正在使用Java配置,並知道我可以添加這樣的自定義過濾器:

@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    DelegatingFilterProxy filter = new DelegatingFilterProxy("springSecurityFilterChain");
    filter.setServletContext(servletContext);
    filter.setContextAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher");
    servletContext.addFilter("corsFilter", CorsFilter.class).addMappingForUrlPatterns(null, false, "/*");
    servletContext.addFilter("springSecurityFilterChain", filter).addMappingForUrlPatterns(null, true, "/*");
}

這很好,但感覺就像我在Spring的邊緣亂砍。

我想要做的是將我的CORS過濾器添加到DelegationFilterProxy。

在我的root配置中,我添加了:

@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public Filter CorsFilter() {
    return new CorsFilter();
}

並刪除了在onStartup中添加自定義過濾器。 現在它根本不起作用。

如何將bean添加到我的過濾器鏈並確保首先調用它?

您可以像在onStartUp()方法中添加springSecurityFilteChain一樣添加它,就像...

@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    DelegatingFilterProxy filter1 = new DelegatingFilterProxy("springSecurityFilterChain");
    filter1.setServletContext(servletContext);
    filter1.setContextAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher");
    DelegatingFilterProxy filter2 = new DelegatingFilterProxy("corsFilter");
    servletContext.addFilter("springSecurityFilterChain", filter1).addMappingForUrlPatterns(null, true, "/*");
    servletContext.addFilter("corsFilter",filter2).addMappingForUrlPatterns(null, false, "/*");
}

要使用Java配置簡單地全局啟用CORS過濾器,請嘗試以下操作: https//spring.io/blog/2015/06/08/cors-support-in-spring-framework#javaconfig

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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