Lombok注解生效异常:getRoles()等方法找不到问题求助
问题排查与修复方案
1. 核心编译错误:User类导入混淆
编译错误提示variable user of type org.springframework.security.core.userdetails.User,说明你的CustomUserDetail构造函数参数User导入的是Spring Security自带的User类,而非你自己定义的User实体。
修复:
在CustomUserDetail类顶部,将导入的org.springframework.security.core.userdetails.User替换为你项目中自定义的User实体类的包路径,比如:
// 替换成你自己的User实体包路径 import com.yourpackage.entity.User;
2. Lombok Getter方法命名不符合调用
你的Role类字段是role_name,Lombok会遵循Java驼峰命名规则生成getRoleName()方法,而非getRole_name()。代码中role.getRole_name()的写法不符合Lombok生成的方法名,导致标红报错。
修复:
将role.getRole_name()改为role.getRoleName():
this.roles = user.getRoles().stream() .map(role -> new SimpleGrantedAuthority(role.getRoleName())) .collect(Collectors.toList());
3. CustomUserDetail重写方法未正确实现
当前CustomUserDetail中重写的UserDetails方法都返回null或false,这会导致认证逻辑失效,需要修正:
@Override public Collection<? extends GrantedAuthority> getAuthorities() { return this.roles; // 返回角色权限集合 } @Override public String getPassword() { return this.password; // 返回用户密码 } @Override public String getUsername() { return this.name; // 返回用户名 } @Override public boolean isAccountNonExpired() { return true; // 账号未过期 } @Override public boolean isAccountNonLocked() { return true; // 账号未锁定 } @Override public boolean isCredentialsNonExpired() { return true; // 凭证未过期 } @Override public boolean isEnabled() { return true; // 账号已启用 }
额外检查:User实体字段错误
你的User实体中@Column(name = "role_id")标注在id字段上,这明显错误,应该改为对应数据库中用户ID的字段名,比如user_id:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") // 修正为用户ID的列名 private Long id;
内容的提问来源于stack exchange,提问作者program
相关产品推荐
相关产品推荐

