java - Spring Security 自定义标头请求匹配器不起作用
问题描述
我有一个使用spring security的要求,如果任何类型的请求包含具有特定值的特定标头,那么只有它应该被允许访问api,否则不允许。下面是我的配置代码:
@Configuration
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter{
public AppSecurityConfig() {
}
@Autowired
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().requestMatchers(new CustomHeaderRequestMatcher()).permitAll();
}
}
以下是客户标头请求匹配器业务逻辑:
public class CustomHeaderRequestMatcher implements RequestMatcher{
public CustomHeaderRequestMatcher() {
}
@Override
public boolean matches(HttpServletRequest request) {
if(Objects.nonNull(request.getHeader("my-token"))
&& request.getHeader("my-token").equals("abc")) {
System.out.println("true");
return true;
}
System.out.println("false");
return false;
}
}
但是在这里我可以看到,即使我没有在我的请求中传递自定义标头“my-token”,它也允许访问 api。对于每个请求,尽管正在调用自定义请求匹配器类。我很困惑为什么 spring security 不处理这个案子?
解决方案
您没有阻止所有其他请求。spring 看到了第一条规则,不知道接下来要做什么。您可以在“permitAll()”之后添加“anyRequest().denyAll()”或“anyRequest().authenticated()”