java - 如何使用 Spring 的 Java Configuration 指定 Filter 执行顺序?

标签 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};
    }
}

我希望 CorsFilterShiroFilter 之前执行。然而,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/

相关文章:

java - Spring JavaConfig 如何引用我定义的 bean 来创建新 bean

java - Google 电子表格 api - 将所有工作表导出为 csv

java - IE 正在将 Controller 的响应作为文件

java - 有多个 Spring "application context"的目的是什么

sql - 存储库 - 在 native 查询中排序不起作用

java - 在 spring 中用 mockings 替换深层次的 Autowiring 依赖

java - Spring 无法找到 JpaRepository

java - Netbeans 中的 NullPointerException

java - 出现奇怪的 java.lang.NoSuchMethodError 错误

java - 如何访问存储库中 LiveData 模型的值