SpringSecurity权限控制实战:为什么你的permitAll配置不生效?
在OAuth2与JWT整合的项目中,我们经常遇到一个诡异现象:明明在HttpSecurity配置中声明了/oauth/**路径的permitAll()权限,但携带有效Token的请求反而会触发AccessDeniedException。这种反直觉的权限拦截问题,本质上源于SpringSecurity的多层过滤机制与权限评估逻辑的叠加效应。
1. 权限控制失效的典型场景复现
假设我们有一个标准的OAuth2授权服务器配置:
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
security.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
}
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/oauth/**").permitAll()
.anyRequest().authenticated()
.


372

被折叠的 条评论
为什么被折叠?



