获取用户角色权限信息实现

这篇具有很好参考价值的文章主要介绍了获取用户角色权限信息实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

package com.java1234.controller;


import com.java1234.entity.R;
import com.java1234.entity.SysUser;
import com.java1234.service.SysUserService;
import com.java1234.util.JwtUtils;
import com.java1234.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 测试包
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private SysUserService sysUserService;

    @RequestMapping("/user/list")
//    @PreAuthorize("hasRole('ROLE_admin2')")
    @PreAuthorize("hasAnyAuthority('system:user:list')")
    public R userList(@RequestHeader(required = false)String token){
        if(StringUtil.isNotEmpty(token)){
            Map<String,Object> resultMap = new HashMap<>();
            List<SysUser>  userList = sysUserService.list();
            resultMap.put("userList",userList);
            return R.ok(resultMap);
        }else{
            return R.error(401,"没有权限访问");
        }

    }

    @RequestMapping("/login")
    public R login(){
        String token = JwtUtils.genJwtToken("java1234");
        return R.ok().put("token",token);
    }
}

package com.java1234.common.security;

import com.java1234.common.exception.UserCountLockException;
import com.java1234.entity.SysUser;
import com.java1234.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * 自定义UserDetails
 */
@Service
public class MyUserDetailServiceImpl implements UserDetailsService {

    @Autowired
    private SysUserService sysUserService;



    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        SysUser sysUser = sysUserService.getByUsername(username);
        if(sysUser==null){
            throw new UsernameNotFoundException("用户名或者密码错误!");
        }else if("1".equals(sysUser.getStatus())){
            throw new UserCountLockException("该用户账号被封禁,具体请联系管理员!");
        }
        return new User(sysUser.getUsername(),sysUser.getPassword(),getUserAuthority(sysUser.getId()));
    }

    public List<GrantedAuthority> getUserAuthority(Long userId) {
        String authority = sysUserService.getByUserAuthorityInfo(userId);
        return AuthorityUtils.commaSeparatedStringToAuthorityList(authority);
    }
}

package com.java1234.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java1234.entity.SysMenu;
import com.java1234.entity.SysRole;
import com.java1234.entity.SysUser;
import com.java1234.mapper.SysMenuMapper;
import com.java1234.mapper.SysRoleMapper;
import com.java1234.service.SysUserService;
import com.java1234.mapper.SysUserMapper;
import com.java1234.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
* @author mayer
* @description 针对表【sys_user】的数据库操作Service实现
* @createDate 2023-07-28 20:32:47
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
    implements SysUserService{

    @Autowired
    SysRoleMapper sysRoleMapper;

    @Autowired
    SysMenuMapper sysMenuMapper;

    @Override
    public SysUser getByUsername(String username) {
        return getOne(new QueryWrapper<SysUser>().eq("username",username));
    }

    @Override
    public String getByUserAuthorityInfo(Long userId) {
        StringBuffer authority = new StringBuffer();
        //根据用户id获取所有的角色信息
        List<SysRole> roleList = sysRoleMapper.selectList(new QueryWrapper<SysRole>().inSql("id", "SELECT role_id FROM sys_user_role WHERE user_id=" + userId));
        if(roleList.size() > 0){
            String roleCodeStrs = roleList.stream().map(r -> "ROLE_" + r.getCode()).collect(Collectors.joining(","));
            authority.append(roleCodeStrs);
        }

        //遍历所有的角色 获取所有菜单权限 而且不重复
        Set<String> menuCodeSet = new HashSet<>();
        for(SysRole sysRole : roleList){
            List<SysMenu> sysMenuList = sysMenuMapper.selectList(new QueryWrapper<SysMenu>().inSql("id", "SELECT menu_id FROM sys_role_menu WHERE role_id =" + sysRole.getId()));
            for(SysMenu sysMenu : sysMenuList){
                String perms = sysMenu.getPerms();
                if(StringUtil.isNotEmpty(perms)){
                    menuCodeSet.add(perms);
                }
            }
        }
        if(menuCodeSet.size() >0){
            authority.append(",");
            String menuCodeStrs = menuCodeSet.stream().collect(Collectors.joining(","));
            authority.append(menuCodeStrs);
        }
        System.out.println("authority:"+authority.toString());
        return authority.toString() ;
    }
}





文章来源地址https://www.toymoban.com/news/detail-628041.html

到了这里,关于获取用户角色权限信息实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL-用户与权限管理:用户管理、权限管理、角色管理

    注:此为笔者学习尚硅谷-宋红康MySQL的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:尚硅谷!!! 1.1 登录MySQL服务器 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: -h参数 后面接主机名或者主机IP, hostname为主机,hos

    2024年04月10日
    浏览(47)
  • Java,设计,功能权限和数据权限,用户、角色、权限和用户组

    ACL(Access Control List),访问控制列表 ACL是一种访问控制机制,包含三个关键要素:用户(User)、资源(Resource)和操作(Operate),当用户请求操作资源时,检查资源的权限列表,如果资源的权限列表中存在该用户的操作权限则允许,否则拒绝。 BAC(Role-Based Access Control),

    2024年02月01日
    浏览(25)
  • SSM——用户、角色、权限操作

    1.   数据库与表结构 1.1  用户表 1.1.1  用户表信息描述   users 1.1.2 sql 语句   1.1.3  实体类 1.2  角色表 1.2.1  角色表信息描述   role 1.2.2 sql 语句     1.2.3  实体类 1.2.4  用户与角色关联关系 用户与角色之间是多对多关系,我们通过 user_role 表来描述其关联,在实体类中 

    2024年02月12日
    浏览(24)
  • Jenkins 配置用户角色和权限

    1、配置条件:         1)已安装Jenkins,当前案例使用版本:2.319.3         2)已成功进入Jenkins,并新建用户:dev_java 2、安装插件【系统管理-插件管理-搜索-可选插件】:Role-based Authorization Strategy 已安装插件   3、选择授权策略【系统管理-全局安全配置-授权策略】,选择

    2024年02月15日
    浏览(30)
  • Elasticsearch用户,角色权限的关系

    Elasticsearch用户:用于绑定指定角色,可以通过创建的用户进行对ES进行操作 Elasticsearch角色:用于绑定指定的索引,对绑定的索引进行操作 Elasticsearch使用特定的用户(非默认用户)创建,写入,读取索引时。 1、先创建指定的角色,授权需要操作的索引 2、创建对应用户,绑

    2024年02月15日
    浏览(38)
  • flask框架-认证权限(一):使用g对象存登录用户信息,认证权限一起实现

    apps         -user         __init__.py authen        __init__.py         token.py ext         __init__.py util.py        public.py         __init__.py app.py 依赖包 authen/token.py user/views.py 认证大致的逻辑: 1、用户登录时,生成token,前端保存token信息 2、前端发起请求时,将token携带在cook

    2024年02月09日
    浏览(35)
  • k8s 用户角色 权限的划分

    在Kubernetes中,角色(Role)和角色绑定(RoleBinding)用于划分用户的权限。 Kubernetes中的角色定义了一组特定操作的权限,例如 创建、删除或修改特定资源 。而 角色绑定则将角色与用户、组或服务账号进行关联,从而赋予其相应的权 限。 常见的Kubernetes用户角色和权限的划分

    2024年02月12日
    浏览(31)
  • 【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!! (一)什么是事务 事务: 事务是指作为单个逻辑工作单元执

    2024年01月22日
    浏览(30)
  • 25-k8s集群中-RBAC用户角色资源权限

            我们通过k8s各组件架构,指导各个组件之间是使用https进行数据加密及交互的,那么同理,我们作为“使用”k8s的各种资源,也是通过https进行数据加密的;         k8s通过我们家目录下的证书来判断我们是谁?通过证书内容,认定我们的权限; 用户证书的位置 [r

    2024年02月22日
    浏览(38)
  • 【Spring Boot项目】根据用户的角色控制数据库访问权限

    在一些特定的业务需求下,要求创建只读用户,但是由于一些查询请求使用的是POST方法,因此在网关层面配置只允许请求GET方法又无法满足。所以就想到了是否可以在 JDBC 层面控制,判断角色并且只允许执行 SELECT 类型的SQL语句。 在Spring Boot项目中,我们可以通过结合网关和

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包