我的初始化程序中有以下代码:
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") //...
};
}
}
关于java - 如何使用 Spring 的 Java Configuration 指定 Filter 执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645957/