zoukankan      html  css  js  c++  java
  • sa-token 权限认证

    依赖:

            <dependency>
                <groupId>cn.dev33</groupId>
                <artifactId>sa-token-spring-boot-starter</artifactId>
                <version>1.14.0</version>
            </dependency>

    登录校验等:

    @ApiOperation(value = "登录", notes = "")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "loginId", value = "登录id", dataType = "string", paramType = "query", required = true, defaultValue = "10001")
        })
        @RequestMapping(value = "/setLoginId", method = RequestMethod.POST)
        public R setLoginId(String loginId) {
            StpUtil.setLoginId(loginId);// 在用户账号密码验证成功后,直接调用以下API进行登录授权
            // StpUtil.setLoginId(loginId, "PC");// 指定设备标识登录
            return R.ok().message("登录成功,loginId:" + loginId);
        }
    
        @ApiOperation(value = "校验登录", notes = "")
        @RequestMapping(value = "/checkLogin", method = RequestMethod.POST)
        public R checkLogin() {
            StpUtil.checkLogin();// 如果当前会话未登录,这句代码会抛出 `NotLoginException`异常
            Object loginId = StpUtil.getLoginId();// 获取当前会话登录的账号id
            // boolean isLogin = StpUtil.isLogin();// 获取当前会话是否已经登录, 返回true或false
            SaSession session = StpUtil.getSession();// 获取当前账号id的Session
            // SaSession sessionByLoginId = StpUtil.getSessionByLoginId(loginId);// 获取账号id为10001的Session
            String tokenValueByLoginId = StpUtil.getTokenValueByLoginId(loginId);// 获取账号id为10001的token令牌值
            // StpUtil.switchTo(10044);// 将当前会话身份临时切换为其它账号
            // boolean hasRole = StpUtil.hasRole("super-admin");// 查询当前账号是否含有指定角色标识, 返回true或false
            // boolean hasPermission = StpUtil.hasPermission("user:add");// 查询当前账号是否含有指定权限, 返回true或false
            return R.ok().message("校验登录成功,loginId:" + loginId + ",session:" + session + ",token:" + tokenValueByLoginId);
        }
    
        @ApiOperation(value = "校验权限", notes = "")
        @RequestMapping(value = "/checkRole", method = RequestMethod.POST)
        public R checkRole() {
            // boolean hasPermission = StpUtil.hasPermission("user:update");// 当前账号是否含有指定权限, 返回true或false
            StpUtil.checkPermission("user:update");// 当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionException
            // StpUtil.checkPermissionAnd("user:update", "user:delete");// 当前账号是否含有指定权限 [指定多个,必须全部验证通过]
            // StpUtil.checkPermissionOr("user:update", "user:delete");// 当前账号是否含有指定权限 [指定多个,只要其一验证通过即可]
    
            // boolean hasRole = StpUtil.hasRole("user");// 当前账号是否含有指定角色标识, 返回true或false
            StpUtil.checkRole("user");// 当前账号是否含有指定角色标识, 如果验证未通过,则抛出异常: NotRoleException
            // StpUtil.checkRoleAnd("user", "admin");// 当前账号是否含有指定角色标识 [指定多个,必须全部验证通过]
            // StpUtil.checkRoleOr("user", "admin");// 当前账号是否含有指定角色标识 [指定多个,只要其一验证通过即可]
            return R.ok().message("校验权限成功");
        }
    
        @ApiOperation(value = "注销登录", notes = "")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "loginId", value = "登录id", dataType = "string", paramType = "query", required = true, defaultValue = "10001")
        })
        @RequestMapping(value = "/logoutByLoginId", method = RequestMethod.POST)
        public R logoutByLoginId(String loginId) {
            StpUtil.logoutByLoginId(loginId);// 将某个账号踢下线 (待到对方再次访问系统时会抛出NotLoginException异常)
            // StpUtil.logout();// 当前会话注销登录
            // StpUtil.logoutByLoginId(loginId, "PC");// 指定设备标识进行强制注销 (不同端不受影响)
            return R.ok().message("注销登录成功");
        }

    获取当前账号权限码集合:

    /**
     * 自定义权限验证接口扩展
     */
    @Component    // 保证此类被SpringBoot扫描,完成sa-token的自定义权限验证扩展
    public class StpInterfaceImpl implements StpInterface {
    
        /**
         * 返回一个账号所拥有的权限码集合
         */
        @Override
        public List<String> getPermissionList(Object loginId, String loginKey) {
            // 本list仅做模拟,实际项目中要根据具体业务逻辑来查询权限
            List<String> list = new ArrayList<String>();
            list.add("101");
            list.add("user:add");
            list.add("user:delete");
            list.add("user:update");
            list.add("user:get");
            list.add("article:get");
            return list;
        }
    
        /**
         * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
         */
        @Override
        public List<String> getRoleList(Object loginId, String loginKey) {
            // 本list仅做模拟,实际项目中要根据具体业务逻辑来查询角色
            List<String> list = new ArrayList<String>();
            list.add("admin");
            list.add("super-admin");
            list.add("user");
            return list;
        }
    
    }

    在线文档:http://sa-token.dev33.cn/doc/index.html

    gitee: https://gitee.com/sz6/sa-token

  • 相关阅读:
    Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.
    旋转二维数组
    replace empty char with new string,unsafe method和native implementation的性能比较
    判断一字符串是否可以另一字符串重新排列而成
    移除重复字符的几个算法简单比较
    也来纠结一下字符串翻转
    判断重复字符存在:更有意义一点
    程序员常去网站汇总
    sublime
    针对程序集 'SqlServerTime' 的 ALTER ASSEMBLY 失败,因为程序集 'SqlServerTime' 未获授权(PERMISSION_SET = EXTERNAL_ACCESS)
  • 原文地址:https://www.cnblogs.com/ooo0/p/14548119.html
Copyright © 2011-2022 走看看