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

用户认证时触发403 Forbidden错误的排查求助

问题排查:调用authenticationManager.authenticate出现403 Forbidden

核心问题出在CustomUserDetails类的账户状态校验方法上,你将所有状态判定方法都返回了false,直接导致Spring Security判定该用户账户不可用,从而在认证环节返回403。

具体问题点

  • isAccountNonExpired()返回false:Spring Security会认为该账户已过期
  • isAccountNonLocked()返回false:Spring Security会认为该账户已被锁定
  • isCredentialsNonExpired()返回false:Spring Security会认为该用户的凭证(密码)已过期
  • isEnabled()返回false:Spring Security会认为该账户已被禁用

Spring Security的认证逻辑会依次检查这些状态,只要有一个状态不通过,就会拒绝认证请求并返回403。

修复方案

如果你的业务暂时不需要这些账户状态限制,直接将这四个方法的返回值改为true即可;如果有业务需求,可以根据User对象的对应状态字段动态返回结果:

@Override
public boolean isAccountNonExpired() {
    return true; // 或根据user的accountNonExpired字段判断
}

@Override
public boolean isAccountNonLocked() {
    return true; // 或根据user的accountNonLocked字段判断
}

@Override
public boolean isCredentialsNonExpired() {
    return true; // 或根据user的credentialsNonExpired字段判断
}

@Override
public boolean isEnabled() {
    return true; // 或根据user的enabled字段判断
}

额外排查建议

  1. 确认数据库中存储的密码是通过BCryptPasswordEncoder加密后的字符串,因为你配置了该编码器,明文存储会导致认证失败。
  2. 检查User对象的role字段格式是否正确,确保通过逗号分割后能生成有效的GrantedAuthority(此点不直接导致403,但会影响后续权限校验)。

内容的提问来源于stack exchange,提问作者David Jung Basnet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:53:27