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