【问题标题】:Multiple WebSecurityConfigurerAdapter and Filter Chains多个 WebSecurityConfigurerAdapter 和过滤器链
【发布时间】:2018-02-14 07:24:42
【问题描述】:

我正在尝试为我的应用程序配置几种身份验证类型,为每种身份验证类型使用单独的 WebSecurityConfigurerAdapter。

总体思路是使用 WebSecurityConfigurerAdapter configure(HttpSecurity http) 方法来匹配 url 模式,并使用专用的专有过滤器(包括授权)进行所有身份验证。

@Configuration
@EnableWebSecurity
public class DemoMultipleWebSecurityConfigurerAdapter {

    @Order(1)
    @Configuration
    public static class BasicSecurityAdapter extends WebSecurityConfigurerAdapter {

        @Override
        public void configure(HttpSecurity http) throws Exception {
            String endpointPattern = "/api/basic/**";
            http.requestMatchers().antMatchers(endpointPattern);
            http.csrf().ignoringAntMatchers(endpointPattern);
            http.authorizeRequests().antMatchers(endpointPattern).authenticated();


            http.addFilterBefore(new MyBasicAuthFilter(), LogoutFilter.class);
        }
    }

    @Order(2)
    @Configuration
    public static class SSOSecurityAdapter extends WebSecurityConfigurerAdapter {
        @Override
        public void configure(HttpSecurity http) throws Exception {
            String endpointPattern = "/api/sso/**";
            http.requestMatchers().antMatchers(endpointPattern);
            http.csrf().ignoringAntMatchers(endpointPattern);
            http.authorizeRequests().antMatchers(endpointPattern).authenticated();


            http.addFilterBefore(new MySSOAuthFilter(), LogoutFilter.class);
        }
    }
}

在初始化期间,我可以看到每个 WebSecurityConfigurerAdapter 正在获取一个不同的 HttpSecurity 实例来配置(假设有自己的过滤器链)但是在运行时被调用的过滤器链总是为第一个 WebSecurityConfigurerAdapter 创建的。不管我调用哪个端点。

根据文档,Spring 应该使用 HttpSecurity 实例来找到正确的过滤器链进行过滤(根据 url 模式)。

关于我做错了什么有什么想法吗? (我正在使用 Spring 1.5.6-RELEASE 来测试这个)

【问题讨论】:

    标签: spring spring-boot spring-security


    【解决方案1】:

    你不需要多个WebSecurityConfigurerAdapter;只需配置过滤器,使其仅用于匹配 URL 模式。换句话说,添加所有过滤器,但使过滤器有条件地起作用。

    【讨论】:

    • 这就是我最终要做的(使用相同的匹配组件 Spring 用于路由到我在 Spring 注册的过滤器内的适当过滤器)。
    • @EranBergman 你有关于如何实现这一目标的代码吗? Sarkar 你能给我一个被剪断的代码吗?
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 2015-12-08
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多