问题是:我可以成功注册过滤器,但不知道如何使用此特定配置设置映射 URL。
这是我的类(class):
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[]{"/"};
}
}
PD
我是使用 WebApplicationInitializer
完成的,但我想使用 AbstractAnnotationConfigDispatcherServletInitializer
。
最佳答案
我能够做到这一点的唯一方法是使用 FilterRegistration.Dynamic 接口(interface)。在您的 WebInitializer 类中,在 onStartup 方法(父类(super class)的覆盖)中手动添加您的自定义过滤器。据我所知,目前没有比这更优雅的方法了。
@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);
}
如果您希望此过滤器正常工作,那么您最好注释掉您已覆盖的 getServletFilters 方法,以便从 servletContext 正确返回此过滤器。
关于java - 如何在 AbstractAnnotationConfigDispatcherServletInitializer Spring 中做过滤映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209319/