java - 将过滤器 bean 添加到 ServletContext

标签 java spring spring-mvc spring-security cors

我正在使用 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。

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

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

并删除了在 onStartup 中添加自定义过滤器。现在它根本不起作用。

如何将 bean 添加到我的过滤器链并确保首先调用它?

最佳答案

您可以像在 onStartUp() 方法中添加 springSecurityFilterChain 一样添加它,例如...

@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 - 将过滤器 bean 添加到 ServletContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33628352/

相关文章:

java - 模拟长序列对象(非 UUID)的服务/数据库/技术

java - 没有可用的 JTA UserTransaction - 指定 'userTransaction' 或 'userTransactionName'

java - Spring MVCOptionalValidatorFactoryBean 未找到

spring - 如何将用户名/密码移出spring-security-context.xml?

java - 请求处理失败;嵌套异常是 java.lang.NumberFormatException : For input string: ""

java - 动态更新时 JPanel 出现不需要的重画

java - 索引 : how many vowels there are?

java - build/install/<project>-shadow 目录——它是什么?

java - Eclipse RCP 找不到 applicationContext.xml

java - 有没有办法正确集成 spring-batch-admin 和 spring-boot ?