Cha*_*res 7 java spring servlet-filters spring-java-config
问题是:我可以成功注册过滤器,但不知道如何使用此特定配置设置映射URL.
这是我的班级:
public class WebInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected Filter[] getServletFilters() {
return new Filter[]{
new DelegatingFilterProxy("springSecurityFilterChain"),
new DelegatingFilterProxy("customFilter")
};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
Run Code Online (Sandbox Code Playgroud)
PD我用它做过WebApplicationInitializer
,但我想用AbstractAnnotationConfigDispatcherServletInitializer
.
小智 9
我能够做到这一点的唯一方法是使用FilterRegistration.Dynamic接口.在WebInitializer类中,在onStartup方法中手动添加自定义过滤器(从超类中重写).根据我的知识,目前没有办法更优雅.
@Override
public void onStartup(ServletContext servletContext)
throws ServletException {
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("my-filter", new MyFilter());
encodingFilter.setInitParameter("blah", "blah");
encodingFilter.addMappingForUrlPatterns(null, false, "/toBeFiltered/*");
super.onStartup(servletContext);
}
Run Code Online (Sandbox Code Playgroud)
如果您希望此过滤器正常工作,那么最好注释掉已重写的getServletFilters方法,以便从servletContext正确地回送此过滤器.
Ana*_*sra -1
对于springSecurityFilterChain,只需将该类添加到与其他配置类相同的包中
@Order(2)
public class MyAppSecureWebAppInitializer extends
AbstractSecurityWebApplicationInitializer {
@Override
protected boolean enableHttpSessionEventPublisher() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
AbstractSecurityWebApplicationInitializer(来自 javadocs)
注册 DelegatingFilterProxy 以在任何其他已注册 Filter 之前使用 springSecurityFilterChain。当与 AbstractSecurityWebApplicationInitializer(Class) 一起使用时,它还会注册一个 ContextLoaderListener。当与 AbstractSecurityWebApplicationInitializer() 一起使用时,通常除了 AbstractContextLoaderInitializer 的子类之外还使用此类。
默认情况下,DelegatingFilterProxy 注册时不支持,但可以通过重写 isAsyncSecuritySupported() 和 getSecurityDispatcherTypes() 来启用。
可以通过重写 afterSpringSecurityFilterChain(ServletContext) 来添加 springSecurityFilterChain 之前和之后的附加配置。
以及来自Github 中的spring security 示例
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
encodingFilter.setForceEncoding(true);
DelegatingFilterProxy reconnectDelegate = new DelegatingFilterProxy("apiExceptionHandler");
return new Filter[] { reconnectDelegate, encodingFilter, new HiddenHttpMethodFilter() };
}
Run Code Online (Sandbox Code Playgroud)