文章目录
  1. 1. 问题
  2. 2. 原因
  3. 3. 解决

问题

通过继承ResourceServerConfigurerAdapter来配置ResourceServer的资源权限时,虽然使用了HttpSecurity#requestMatchers方法来匹配特定的资源,但是其他未匹配的资源依然会被匹配保护。

github上同样的问题

原因

这在使用spring-security-oauth的2.0.9之前的版本配合Spring Security 4时会出现这个问题。原因是Spring Security 4.x版本稍微修改了request matchers的规则。多次调用HttpSecurity#requestMatchers不会覆盖之前的调用。 2.0.9做了如下修改

1
2
3
4
5
6
if (endpoints != null) {
// Assume we are in an Authorization Server
- requests.requestMatchers(new NotOAuthRequestMatcher(endpoints
- .oauth2EndpointHandlerMapping()));
+ http.requestMatcher(new NotOAuthRequestMatcher(endpoints.oauth2EndpointHandlerMapping()));
}

解决

Spring Security 4需要使用Spring Security OAuth 2.0.9及以上的版本,如果使用Spring Boot,则需要使用1.3.3级以上版本,1.3.2依赖的依然是Spring Security OAuth 2.0.8版本。

文章目录
  1. 1. 问题
  2. 2. 原因
  3. 3. 解决
Fork me on GitHub