我编写了UserDetails的实现,以便更改登录和用户角色。使用登录,一切都变得非常简单,但是我在角色方面遇到了问题。我不明白我需要做什么来将默认的CUSTOMER角色更改为另一个SELLER角色
@ToString
public class CustomUserDetails implements UserDetails {
@ToString.Exclude
private Account account;
private final long serialVersionUID = 1L;
public CustomUserDetails(Account account) {
this.account = account;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ROLE_" + this.account.getRole().getAuthority()));
return authorities;
}
public void setRole(Role role) {
this.account.setRole(role);
}
@Override
public String getPassword() {
return this.account.getPassword();
}
@Override
public String getUsername() {
return this.account.getLogin();
}
public void setUsername(String username) {
this.account.setLogin(username);
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
3条答案
按热度按时间y1aodyip1#
如果您还没有将CustomUserDetails实体存储到数据库中的服务:
你的CustomUserDetails.class必须有注解@Entity,因为它应该被存储为关系数据库中的表。因此,它必须有一个用@Id注解的id字段。下一步:
7fyelxc52#
如果你想分配一个角色,那么你可以在你的数据库中有一个列角色,你可以在提交你的数据的时候给予它,你也可以在你的控制器中有一个方法来更新它
实体
wribegjk3#
也许我应该把我的问题说得更具体一些。但是。我自己找到了解决这个问题的方法。也许我的方法会帮助到别人。
我的自定义用户详细信息服务:
我的自定义用户详细信息:
控制器中更改用户会话中的数据的方法(需要重构):
因此,我成功地实现了用户角色的动态变化。如果你对我的方法有什么改进的建议,我很乐意听听。