mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
注解鉴权 代码示例
This commit is contained in:
parent
0c92cd4ed8
commit
7142f4db36
@ -3,8 +3,6 @@ package com.pj;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
import cn.dev33.satoken.SaManager;
|
||||
|
||||
/**
|
||||
* Sa-Token 示例
|
||||
* @author kong
|
||||
@ -15,7 +13,6 @@ public class SaTokenCaseApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(SaTokenCaseApplication.class, args);
|
||||
System.out.println("\n启动成功:Sa-Token配置如下:" + SaManager.getConfig());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,95 @@
|
||||
package com.pj.cases;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.dev33.satoken.util.SaResult;
|
||||
|
||||
/**
|
||||
* Sa-Token 注解鉴权示例
|
||||
*
|
||||
* @author kong
|
||||
* @since 2022-10-13
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/at-check/")
|
||||
public class AtCheckController {
|
||||
|
||||
/*
|
||||
* 前提1:首先调用登录接口进行登录,代码在 com.pj.cases.LoginAuthController 中有详细解释,此处不再赘述
|
||||
* ---- http://localhost:8081/acc/doLogin?name=zhang&pwd=123456
|
||||
*
|
||||
* 前提2:项目在配置类中注册拦截器 SaInterceptor ,代码在 com.pj.satoken.SaTokenConfigure
|
||||
* 此拦截器将打开注解鉴权功能
|
||||
*
|
||||
* 然后我们就可以使用以下示例中的代码进行注解鉴权了
|
||||
*/
|
||||
|
||||
// 登录鉴权 ---- http://localhost:8081/at-check/checkLogin
|
||||
// 登录认证后才可以进入方法
|
||||
@SaCheckLogin
|
||||
@RequestMapping("checkLogin")
|
||||
public SaResult checkLogin() {
|
||||
// 通过注解鉴权后才能进入方法 ...
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
// 权限校验 ---- http://localhost:8081/at-check/checkPermission
|
||||
// 只有具有 user.add 权限的账号才可以进入方法
|
||||
@SaCheckPermission("user.add")
|
||||
@RequestMapping("checkPermission")
|
||||
public SaResult checkPermission() {
|
||||
// ...
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
// 权限校验2 ---- http://localhost:8081/at-check/checkPermission2
|
||||
// 一次性校验多个权限,必须全部拥有,才可以进入方法
|
||||
@SaCheckPermission(value = {"user.add", "user.delete", "user.update"}, mode = SaMode.AND)
|
||||
@RequestMapping("checkPermission2")
|
||||
public SaResult checkPermission2() {
|
||||
// ...
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
// 权限校验3 ---- http://localhost:8081/at-check/checkPermission3
|
||||
// 一次性校验多个权限,只要拥有其中一个,就可以进入方法
|
||||
@SaCheckPermission(value = {"user.add", "user.delete", "user.update"}, mode = SaMode.OR)
|
||||
@RequestMapping("checkPermission3")
|
||||
public SaResult checkPermission3() {
|
||||
// ...
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
// 角色校验 ---- http://localhost:8081/at-check/checkRole
|
||||
// 只有具有 super-admin 角色的账号才可以进入方法
|
||||
@SaCheckRole("super-admin")
|
||||
@RequestMapping("checkRole")
|
||||
public SaResult checkRole() {
|
||||
// ...
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
// 角色权限双重 “or校验” ---- http://localhost:8081/at-check/userAdd
|
||||
// 具备 "user.add"权限 或者 "admin"角色 即可通过校验
|
||||
@RequestMapping("userAdd")
|
||||
@SaCheckPermission(value = "user.add", orRole = "admin")
|
||||
public SaResult userAdd() {
|
||||
return SaResult.data("用户信息");
|
||||
}
|
||||
|
||||
// 忽略校验 ---- http://localhost:8081/at-check/ignore
|
||||
// 使用 @SaIgnore 修饰的方法,无需任何校验即可进入,具体使用示例可参照在线文档
|
||||
@SaIgnore
|
||||
@SaCheckLogin
|
||||
@RequestMapping("ignore")
|
||||
public SaResult ignore() {
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
}
|
@ -18,6 +18,7 @@ public class KickoutController {
|
||||
|
||||
/*
|
||||
* 前提:首先调用登录接口进行登录,代码在 com.pj.cases.LoginAuthController 中有详细解释,此处不再赘述
|
||||
* ---- http://localhost:8081/acc/doLogin?name=zhang&pwd=123456
|
||||
*/
|
||||
|
||||
// 将指定账号强制注销 ---- http://localhost:8081/kickout/logout?userId=10001
|
||||
@ -48,6 +49,7 @@ public class KickoutController {
|
||||
*/
|
||||
|
||||
// 根据 Token 值踢人 ---- http://localhost:8081/kickout/kickoutByTokenValue?tokenValue=xxxx-xxxx-xxxx-xxxx已登录账号的token值
|
||||
@RequestMapping("kickoutByTokenValue")
|
||||
public SaResult kickoutByTokenValue(String tokenValue) {
|
||||
|
||||
StpUtil.kickoutByTokenValue(tokenValue);
|
||||
|
@ -1,4 +1,10 @@
|
||||
# 注解鉴权
|
||||
|
||||
<a class="case-btn" href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/AtCheckController.java"
|
||||
target="_blank">
|
||||
本章代码示例:Sa-Token 注解鉴权 —— [ com.pj.cases.AtCheckController.java ]
|
||||
</a>
|
||||
|
||||
---
|
||||
|
||||
有同学表示:尽管使用代码鉴权非常方便,但是我仍希望把鉴权逻辑和业务逻辑分离开来,我可以使用注解鉴权吗?当然可以!<br>
|
||||
@ -103,12 +109,12 @@ mode有两种取值:
|
||||
|
||||
|
||||
### 4、角色权限双重 “or校验”
|
||||
假设有以下业务场景:一个接口在具有权限 `user-add` 或角色 `admin` 时可以调通。怎么写?
|
||||
假设有以下业务场景:一个接口在具有权限 `user.add` 或角色 `admin` 时可以调通。怎么写?
|
||||
|
||||
``` java
|
||||
// 注解式鉴权:只要具有其中一个权限即可通过校验
|
||||
// 角色权限双重 “or校验”:具备指定权限或者指定角色即可通过校验
|
||||
@RequestMapping("userAdd")
|
||||
@SaCheckPermission(value = "user-add", orRole = "admin")
|
||||
@SaCheckPermission(value = "user.add", orRole = "admin")
|
||||
public SaResult userAdd() {
|
||||
return SaResult.data("用户信息");
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<a class="case-btn" href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/JurAuthController.java"
|
||||
target="_blank">
|
||||
本章代码示例:Sa-Token 权限认证 —— [ sa-token-demo-case:com.pj.cases.JurAuthController.java ]
|
||||
本章代码示例:Sa-Token 权限认证 —— [ com.pj.cases.JurAuthController.java ]
|
||||
</a>
|
||||
|
||||
---
|
||||
|
@ -1,4 +1,14 @@
|
||||
# 踢人下线
|
||||
|
||||
<a class="case-btn" href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/KickoutController.java"
|
||||
target="_blank">
|
||||
本章代码示例:Sa-Token 踢人下线 —— [ com.pj.cases.KickoutController.java ]
|
||||
</a>
|
||||
|
||||
---
|
||||
|
||||
### 设计思路
|
||||
|
||||
所谓踢人下线,核心操作就是找到指定 `loginId` 对应的 `Token`,并设置其失效。
|
||||
|
||||

|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<a class="case-btn" href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/cases/LoginAuthController.java"
|
||||
target="_blank">
|
||||
本章代码示例:Sa-Token 登录认证 —— [ sa-token-demo-case:com.pj.cases.LoginAuthController.java ]
|
||||
本章代码示例:Sa-Token 登录认证 —— [ com.pj.cases.LoginAuthController.java ]
|
||||
</a>
|
||||
|
||||
---
|
||||
|
Loading…
Reference in New Issue
Block a user