Spring Boot v2.4.5集成JWT调用认证接口抛出DisabledException用户禁用异常
异常产生原因
Spring Security 认证流程中会默认校验UserDetails接口定义的账号状态方法返回值,其中isEnabled()方法用于判断账号是否处于启用状态,若返回false就会直接抛出DisabledException: User is disabled异常。
你编写的User实体类实现了UserDetails接口,但没有显式重写isEnabled()方法:
- 如果你是通过Lombok的
@Data注解自动生成该方法,实体类中没有对应enabled字段时,默认生成的方法返回值为false,直接触发异常 - 即使业务不需要账号禁用功能,也必须显式实现该方法返回合法值,否则会导致认证流程校验失败。
解决方案
根据你的业务需求选择对应实现方式即可:
- 不需要账号启用/禁用控制的场景,直接固定返回
true
在User类中添加如下重写方法:
@Override public boolean isEnabled() { return true; }
- 需要支持账号禁用功能的场景,先补充映射字段再实现方法
// 新增和数据库表对应的enabled字段,存储账号启用状态 @Column(name = "enabled") private boolean enabled; @Override public boolean isEnabled() { return this.enabled; }
额外提示:你当前
getAuthorities()方法返回了null,后续做权限校验时会触发空指针异常,建议修改为返回空集合:return Collections.emptyList();
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

