2017-08-22 18 views
0

我们的配置看起来像这样一个特殊的路径添加过滤器:如何仅供WebSecurityConfigurerAdapter

@Configuration 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    public static final String LOGIN_PATH_EXPRESSION = "/login"; 
    public static final String API_PATH_EXPRESSION = "/api/**/*"; 
    public static final String GLOBAL_PATH_EXPRESSION = "/**/*"; 

    @Autowired 
    @Qualifier("ssoFilter") 
    private Filter ssoFilter; 

    @Autowired 
    private VerifyingProcessingFilter verifyingProcessingFilter; 


    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .userDetailsService(username -> new User(username, "", Collections.emptyList())) 
      .sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
      .and() 
      .authorizeRequests() 
       .antMatchers(LOGIN_PATH_EXPRESSION) 
       .authenticated() 
       .and() 
       .httpBasic() 
       .and() 
       .authenticationProvider(new SimpleAuthenticationProvider()) 
      .authorizeRequests() 
       .antMatchers(API_PATH_EXPRESSION).authenticated() 
       .and() 
       .addFilterBefore(ssoFilter, BasicAuthenticationFilter.class) 
       .addFilterAfter(verifyingProcessingFilter, FilteredOAuth2AuthenticationProcessingFilter.class) 
      .authorizeRequests() 
       .antMatchers(GLOBAL_PATH_EXPRESSION) 
       .permitAll() 
       .and() 
       .csrf() 
       .disable(); 
    } 

,并认识到我们的FilteredOAuth2AuthenticationProcessingFilter内结束/login通话中,问我们自己为什么会这样。

目标是让ssoFilterverifyingProcessingFilter仅在与路径api/**/*碰撞端点时应用。

现在我们必须在过滤器内部添加一个AntMatching检查,以便它仅适用于正确的请求,但我认为应该可以将它添加到匹配的请求中。

有人可以提供一个关于如何添加一个过滤器到一个特定的Ant匹配路径请求的例子吗?

回答

1

看起来你不能用单个配置类来完成。看看这个问题:How to apply spring security filter only on secured endpoints?

在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。从Spring IO documentation

我们可以配置多个HttpSecurity情况下,正如我们可以有 多个块。关键是多次扩展WebSecurityConfigurationAdapter 。例如,以下是 以/ api /开头的不同配置的示例。

的文档有必要的步骤一个完整的例子来实现:

  1. 配置身份验证正常
  2. 创建包含 @Order WebSecurityConfigurerAdapter的实例来指定哪些WebSecurityConfigurerAdapter应首先考虑为 。
  3. 的http.antMatcher指出,这HttpSecurity 只适用于与/ API开头的URL/
  4. 创建WebSecurityConfigurerAdapter的另一个实例。如果URL不以/ api开头,则将使用此配置。这个 配置在ApiWebSecurityConfigurationAdapter 之后考虑,因为它的@Order值在1之后(没有@Order默认为最后一个)。

祝你好运!

相关问题