博客 / 詳情

返回

Spring Security+JWT+Vue實現登錄權限控制(二)

前言

在上一篇文章Spring Security+JWT+Vue實現登錄權限控制(一)中,實現用户權限是通過在User類中添加一個role屬性。但是這個做法並不好,只是因為項目簡單,所以我就簡單處理了。

改進

數據庫

在數據庫中添加兩個表,分別為roleuser_rolerole表有id, name, nameZh屬性,分別代表主鍵、角色名稱和角色名稱的中文。user_role表有id, userId, roleId屬性,分別代表主鍵、用户id和角色id,用户id和角色id也是外鍵。

後端

添加Role類:

@Data
public class Role {

    private Long id;
    private String name;
    private String nameZh;

}

並且將User類中的String role改為List<Role> rolesgetAuthorities方法也需要改進:

private List<Role> roles;

public Collection<? extends GrantedAuthority> getAuthorities() {
    List<SimpleGrantedAuthority> authorities = new ArrayList<>(roles.size());
    for (Role role : roles) {
        authorities.add(new SimpleGrantedAuthority(role.getName()));
    }
    return authorities;
}

同樣的,MyUserDetailsService中也需要做出改變:

@Service
public class MyUserDetailsService implements UserDetailsService{

    @Autowired
    private UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userMapper.loadUserByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("用户不存在!");
        }
        user.setRoles(userMapper.getUserRolesById(user.getId()));
        return user;
    }

}

通過userMapper中的getUserRolesById(id)方法,該方法需要自己寫一個sql語句獲取用户的角色。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.