我希望将角色考虑为用户属性,而不是独立的角色类,因此我不需要在我的数据库中有一个角色表。但是通用的Spring
UserDetails
服务通过其中一个用户详细参数 Collection<GrantedAuthority> getAuthorities()
传递GrantedAuthority
(即授予权限)。
我想做的是将这个通用的GrantedAuthority
参数替换为在我的“User”类中声明的角色(String role),如下所示。@Entity(name="usr")
public class User {
@Id
@Column(unique=true)
private String username;
private String password;
private String role;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
以下是我的自定义用户详细信息服务类:
@Service
@Transactional(readOnly = true)
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository repository;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
try {
x.y.User user = repository.findByUsername(username);
boolean enabled = true;
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
return new User(
user.getUsername(),
user.getPassword(),
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
user.getRole());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
由于我传递的是String类型的user.getRole()
而不是默认角色类型Collection<GrantedAuthority> getAuthorities()
,所以它返回了错误。
我该如何自定义它,以便我可以使用我在“User”类中声明为属性的角色(即字符串类型)?
注意:
必须保留正常的安全流程!这意味着不能影响正常的Spring Security流程。
提前致谢!