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

 

上一篇:SQL(DDL、DML、TCL)


下一篇:SqlParameter的作用与用法