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

  • 相关阅读:
    mysql中的内连接and 多表查询
    webdriver中的三大等待及窗口的切换
    postman断言
    postman数据驱动ddt
    postman环境变量和全局变量的使用
    postman 接口请求过程
    垃圾脑瘫的坑
    待填的坑
    CF185D
    CF235E 题解(转)
  • 原文地址:https://www.cnblogs.com/ooo0/p/14548119.html
Copyright © 2011-2022 走看看