极核getshell 2025-12-05 09:20 采纳率: 31.8%
浏览 3

Spring Security的过滤器链执行顺序是如何确定的? 如何自定义过滤器并插入到特定位置?

Spring Security的过滤器链执行顺序是如何确定的? 如何自定义过滤器并插入到特定位置?

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-12-05 09:30
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Spring Security过滤器链执行顺序

    Spring Security的过滤器链执行顺序是通过SecurityFilterChain类来确定的。SecurityFilterChain类实现了FilterChain接口,定义了过滤器链的执行顺序。

    默认过滤器链

    Spring Security提供了一个默认的过滤器链,包含以下过滤器:

    1. SecurityContextPersistenceFilter
    2. HeaderWriterFilter
    3. CsrfFilter
    4. LogoutFilter
    5. UsernamePasswordAuthenticationFilter
    6. DefaultLoginPageGeneratingFilter
    7. DefaultLogoutPageGeneratingFilter
    8. RequestCacheAwareFilter
    9. SecurityContextHolderAwareRequestFilter
    10. AnonymousAuthenticationFilter
    11. SessionManagementFilter
    12. ExceptionTranslationFilter
    13. FilterSecurityInterceptor

    自定义过滤器链

    要自定义过滤器链,需要创建一个SecurityFilterChain实例,并添加自定义过滤器。可以使用SecurityFilterChain的构造函数或addFilter方法添加过滤器。

    插入过滤器

    要插入过滤器到特定位置,可以使用addFilterBeforeaddFilterAfter方法。例如:

    SecurityFilterChain filterChain = new SecurityFilterChain(
        new AntPathRequestMatcher("/api/**"),
        Arrays.asList(
            new MyFilter(), // 自定义过滤器
            new SecurityContextPersistenceFilter()
        )
    );
    
    // 插入过滤器到特定位置
    filterChain.addFilterBefore(new MyFilter(), SecurityContextPersistenceFilter.class);
    

    总结

    Spring Security的过滤器链执行顺序是通过SecurityFilterChain类来确定的。可以自定义过滤器链并插入过滤器到特定位置。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日