pde*_*eva 7 java spring spring-java-config
我在初始化程序中有以下代码:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Filter[] getServletFilters() {
DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter");
shiroFilter.setTargetFilterLifecycle(true);
return new Filter[]{new CorsFilter(),shiroFilter};
}
}
Run Code Online (Sandbox Code Playgroud)
我想CorsFilter
先被执行ShiroFilter
.但是,Spring文档并未说明执行过滤器的顺序取决于它们在返回数组中的顺序.
如果是,有人可以澄清一下吗?如果没有,有人建议如何做,我保证过滤器的执行顺序?
die*_*ter 11
只是为了让问题保持最新.
使用spring @Order - Annotation
@Component(value = "myCorsFilter")
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
[...]
}
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new DelegatingFilterProxy("myEncodingFilter"),
new DelegatingFilterProxy("myCorsFilter"), // or just new CorsFilter()
new DelegatingFilterProxy("mySecurityFilter") //...
};
}
}
Run Code Online (Sandbox Code Playgroud)
过滤器按照数组的顺序注册。
这会导致ServletContext.addFilter()
按项目的顺序调用,但是,我不确定这是否实际上会导致容器按照它们注册的顺序执行过滤器。
例如,Tomcat 似乎使用HashMap 来存储过滤器,因此我不希望过滤器一定按照添加的顺序运行。
Spring 确实提供了一个org.springframework.web.filter.CompositeFilter
,所以我只需返回一个CompositeFilter
包含您实际想要使用的两个过滤器的单个。
归档时间: |
|
查看次数: |
8689 次 |
最近记录: |