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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM