【发布时间】: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