0
点赞
收藏
分享

微信扫一扫

Spring Security授权_编写查询权限方法

Spring Security授权_编写查询权限方法_ide
在认证后进行授权需要根据用户id查询到用户的权限,写法如下:

编写用户、角色、权限实体类

//用户类
/**
* @Author yqq
* @Date 2022/05/17 22:47
* @Version 1.0
*/
@Data
public class Users {
private Integer uid;
private String username;
private String password;
private String phone;
}
//角色类
@Data
public class Role {
private Integer rid;
private String rolename;
private String roledesc;
}
//权限类
@Data
public class Permission {
private Integer pid;
private String permissionname;
private String url;

编写UserMapper接口

public interface UsersMapper extends BaseMapper<Users> {
List<Permission> findPermissionByUserName(String username);
}

在resources目录中编写UsersMapper的映射文件

<select id="findPermissionByUserName" resultType="com.neu.model.Permission">
SELECT
p.pid,p.permissionName,p.url
FROM
users u
LEFT JOIN users_role ur ON u.uid = ur.uid
LEFT JOIN role r ON ur.rid = r.rid
LEFT JOIN role_permission rp ON r.rid = rp.rid
LEFT JOIN permission p ON rp.pid = p.pid
WHERE username = #{username}
</select>

测试

@SpringBootTest
public class MapperTest {
@Autowired
private UsersMapper usersMapper;
@Test
public void test(){
List<Permission> permissions = usersMapper.findPermissionByUserName("yqq");
permissions.forEach(System.out::println);
}
}

Spring Security授权_编写查询权限方法_spring_02
Spring Security授权_编写查询权限方法_spring_03

认证成功后把权限封装GrantedAuthority类

@Service
public class MyUserDetailService implements UserDetailsService {

@Autowired
private UsersMapper usersMapper;

//自定义认证逻辑
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//1 构造查询条件
QueryWrapper<Users> wrapper = new QueryWrapper<Users>().eq("username", username);
//2 查询用户
Users users = usersMapper.selectOne(wrapper);
if (users == null)
return null;
//3 查询用户权限
List<Permission> permissions = usersMapper.findPermissionByUserName(username);
//4 将自定义权限集合转换为Security的权限类型集合
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
permissions.forEach(e -> {
grantedAuthorities.add(new SimpleGrantedAuthority(e.getUrl()));
});
//5 封装为UserDetails对象
UserDetails userDetails = User.withUsername(users.getUsername())
.password(users.getPassword())
.authorities(grantedAuthorities)
.build();
//6 返回封装好的userDetails对象
return userDetails;
}
}


举报

相关推荐

0 条评论