依赖:
<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