我试图通过扩展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");
答案 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);