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