You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成WebSecurityConfigurerAdapter后所有请求返回403 Forbidden问题求助

问题排查与解决

1. 规则匹配顺序错误导致权限覆盖

Spring Security 的authorizeRequests规则是从上到下依次匹配,匹配到第一条后就不再执行后续规则。你的配置中:

.antMatchers(HttpMethod.GET, "/**")
.hasAuthority("ADMIN") 
.antMatchers(HttpMethod.GET, "/tools")
.hasAuthority("USER")

GET /**会匹配所有 GET 请求(包括/tools),导致后面针对/tools的权限规则永远不会生效。所有 GET 请求都被要求具备ADMIN权限,若当前用户只有USER权限,就会返回403。

修复方法:将更具体的路径规则放在前面,调整顺序:

.antMatchers(HttpMethod.GET, "/tools")
.hasAuthority("USER")
.antMatchers(HttpMethod.GET, "/**")
.hasAuthority("ADMIN")

2. 缺少认证入口配置

你的配置仅定义了权限规则,但未配置用户认证方式(比如登录接口、HTTP Basic 认证等),同时设置了sessionCreationPolicy(SessionCreationPolicy.STATELESS)(无状态会话),请求没有携带合法认证信息时,会直接返回403。

修复方法:添加认证方式,以下是两种常见方案:

方案1:启用HTTP Basic认证(快速测试)

在configure(HttpSecurity http)中追加配置:

.and()
.httpBasic(); // 启用HTTP Basic认证,测试时可通过账号密码完成登录

方案2:JWT认证(前后端分离场景常用)

若使用JWT,需自定义过滤器解析请求中的Token,将用户信息注入SecurityContext:

  1. 创建JWT过滤器类,继承OncePerRequestFilter,实现Token解析、用户信息查询逻辑
  2. 在configure(HttpSecurity http)中添加该过滤器:
.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)

3. 冗余代码清理

你重复编写了两次CustomUserDetails类,保留其中一个即可,避免类冲突。

额外验证点

  • 确认UserDetailsService实现类已被正确加载,能根据用户名查询到用户数据
  • 确认用户表中role字段的值(如"ADMIN"或"USER")与配置中hasAuthority的参数大小写完全一致(Spring Security权限区分大小写)
  • 确认存储的密码是通过BCryptPasswordEncoder加密后的字符串,而非明文

内容的提问来源于stack exchange,提问作者vitoriac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:30:54