返回介绍

4.4 定义多个过滤器链

发布于 2025-04-26 13:16:44 字数 1624 浏览 0 评论 0 收藏

在 Spring Security 中可以同时存在多个过滤器链,一个 WebSecurityConfigurerAdapter 的实例就可以配置一条过滤器链。

我们来看如下一个案例:

在 SecurityConfig 中分别定义两个静态内部类 SecurityConfig01 和 SecurityConfig02,两个配置类都继承自 WebSecurityConfigurerAdapter,可以分别配置一条过滤器链。

先来看 Security01。在 Security01 中,我们设置过滤器链的拦截规则是/bar/**,即如果请求路径是/bar/**格式的,则进入到 Security01 的过滤器链中进行处理。同时我们配置了局部 AuthenticationManager 对应的用户是 bar/123,由于没有重写 configure(Authentication ManagerBuilder) 方法,所以注册到 Spring 容器中的 UserDetailsService 将作为局部 Authentication Manager 的 parent 对应的用户。换句话说,如果登录的路径是/bar/login,那么开发者可以使用 bar/123 和 javaboy/123 两个用户进行登录。登录效果如图 4-8 所示(注意登录路径是/bar/login)。

图 4-8 使用 javaboy/123 进行登录

再来看 SecurityConfig02。在 Security02 中,我们设置过滤器链的拦截规则是/foo/**,即如果请求路径是/foo/**格式的,则进入到 Security02 的过滤器链中进行处理,同时我们配置了局部 AuthenticationManager 对应的用户是 foo/123,由于重写了 configure(Authentication ManagerBuilder) 方法,在该方法中定义了局部 AuthenticationManager 的 parent 对应的用户,此时注册到 Spring 容器中的 UserDetailsService 实例对于/foo/**过滤器链不再生效。换句话说,如果登录路径是/foo/login,开发者可以使用 foo/123 和 javagirl/123 两个用户进行登录,而不可以使用 javaboy/123 进行登录。登录效果如图 4-9 所示(注意登录路径是/foo/login)。

图 4-9 使用 foo/123 进行登录

需要注意的是,如果配置了多个过滤器链,需要使用 @Order 注解来标记不同配置的优先级(即不同过滤器链的优先级),数字越大优先级越低。当请求到来时,会按照过滤器链的优先级从高往低,依次进行匹配。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。