Spring Security WebSecurityConfig忽略具有多个条件的某些请求

时间:2017-05-05 21:34:47

标签: spring-security

我试图通过扩展WebSecurityConfigurerAdapter类并实施configure(WebSecurity web)方法来绕过所有过滤器和安全层。

如果我想要忽略多个端点,它可以完美地工作。如果我想忽略具有特定端点的请求或具有某个请求标头,它也可以工作,但它不能满足两个条件,这意味着忽略具有特定路径和特定请求标头的请求。如果满足其中任何一个条件,它基本上会忽略它。我尝试了不同的变体,如:

RequestHeaderRequestMatcher requestHeaderRequestMatcher = new RequestHeaderRequestMatcher(HEADER_HEALTH_CHECK, "1");
AntPathRequestMatcher antPathRequestMatcher = new AntPathRequestMatcher("/healthStats");
web
    .ignoring()
        .requestMatchers(requestHeaderRequestMatcher, antPathRequestMatcher);

web
    .ignoring()
        .requestMatchers(requestHeaderRequestMatcher)
        .antMatchers("/healthStats");

1 个答案:

答案 0 :(得分:1)

您必须合并两个请求匹配器,请参阅AndRequestMatcher

  

RequestMatcher如果所有传入的RequestMatcher实例都匹配,则返回true。

您修改后的配置:

RequestHeaderRequestMatcher requestHeaderRequestMatcher = new RequestHeaderRequestMatcher(HEADER_HEALTH_CHECK, "1");
AntPathRequestMatcher antPathRequestMatcher = new AntPathRequestMatcher("/healthStats");
AndRequestMatcher andRequestMatcher = new AndRequestMatcher(requestHeaderRequestMatcher, antPathRequestMatcher);
web
    .ignoring()
        .requestMatchers(andRequestMatcher);