我在初始化程序中有以下代码:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Filter[] getServletFilters() { DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter"); shiroFilter.setTargetFilterLifecycle(true); return new Filter[]{new CorsFilter(),shiroFilter}; } }
我想CorsFilter
先被执行ShiroFilter
.但是,Spring文档并未说明执行过滤器的顺序取决于它们在返回数组中的顺序.
如果是,有人可以澄清一下吗?如果没有,有人建议如何做,我保证过滤器的执行顺序?
只是为了让问题保持最新.
使用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") //... }; } }