eya*_*asu 5 java spring spring-mvc spring-security
我想将角色视为用户的属性,而不是拥有独立的角色类,因此我不需要在数据库中有角色表。但是通用的spring UserDetails服务通过了GrantedAuthority(即Collection<GrantedAuthority> getAuthorities())作为用户详细信息参数之一)。
我想做的就是用GrantedAuthority在“用户”类中声明的角色(字符串角色)替换此通用参数,如下所示。
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
还有我的customUserdetail服务类:
@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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
自从我通过以来user.getRole(),它返回一个错误,它是String,而不是Collection<GrantedAuthority> getAuthorities()Spring安全中默认的角色类型,它返回一个错误。
如何自定义它,以便可以使用已声明为“用户”类的属性的角色(字符串类型)?
Mind:正常的安全流程必须保留!含义,而不会影响正常的弹簧安全流程。
先感谢您!。
小智 5
这可以通过您的 User 实体实现 UserDetails 接口并重写 getAuthorities() 方法来完成:
public class User implements UserDetails {
...
private String role;
...
@Override
public Set<GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority(this.role));
return authorities;
}
}
Run Code Online (Sandbox Code Playgroud)
最好遵守 Spring Security 角色名称命名约定,即以“ROLE_”前缀开头。
| 归档时间: |
|
| 查看次数: |
5206 次 |
| 最近记录: |