mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 08:37:21 +08:00
jwt插件文档
This commit is contained in:
parent
bb5c378f48
commit
7369977241
@ -57,6 +57,9 @@ cd sa-token-demo-sso3-client
|
||||
call mvn clean
|
||||
cd ..
|
||||
|
||||
cd sa-token-demo-jwt
|
||||
call mvn clean
|
||||
cd ..
|
||||
|
||||
|
||||
|
||||
|
@ -6,7 +6,7 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForTokenStyle;
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForStyle;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
||||
*/
|
||||
@Bean
|
||||
public StpLogic getStpLogicJwt() {
|
||||
return new StpLogicJwtForTokenStyle();
|
||||
return new StpLogicJwtForStyle();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import cn.dev33.satoken.SaManager;
|
||||
import cn.dev33.satoken.dao.SaTokenDao;
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForTokenStyle;
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForStyle;
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.dev33.satoken.util.SaTokenConsts;
|
||||
@ -18,14 +18,14 @@ import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.jwt.JWT;
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt:token-style 模式 测试
|
||||
* Sa-Token 整合 jwt:Style 模式 测试
|
||||
*
|
||||
* @author kong
|
||||
*
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = StartUpApplication.class)
|
||||
public class JwtForTokenStyleTest {
|
||||
public class JwtForStyleTest {
|
||||
|
||||
// 持久化Bean
|
||||
static SaTokenDao dao;
|
||||
@ -33,15 +33,15 @@ public class JwtForTokenStyleTest {
|
||||
// 开始
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
System.out.println("\n\n------------------------ TokenStyleTest star ...");
|
||||
System.out.println("\n\n------------------------ JwtForStyleTest star ...");
|
||||
dao = SaManager.getSaTokenDao();
|
||||
StpUtil.setStpLogic(new StpLogicJwtForTokenStyle());
|
||||
StpUtil.setStpLogic(new StpLogicJwtForStyle());
|
||||
}
|
||||
|
||||
// 结束
|
||||
@AfterClass
|
||||
public static void afterClass() {
|
||||
System.out.println("\n\n------------------------ TokenStyleTest end ... \n");
|
||||
System.out.println("\n\n------------------------ JwtForStyleTest end ... \n");
|
||||
}
|
||||
|
||||
// 测试:登录
|
@ -64,6 +64,7 @@
|
||||
- [Alone独立Redis插件](/plugin/alone-redis)
|
||||
- [持久层扩展](/plugin/dao-extend)
|
||||
- [和 Thymeleaf 集成](/plugin/thymeleaf-extend)
|
||||
- [和 jwt 集成](/plugin/jwt-extend)
|
||||
|
||||
- **其它**
|
||||
- [更新日志](/more/update-log)
|
||||
|
142
sa-token-doc/doc/plugin/jwt-extend.md
Normal file
142
sa-token-doc/doc/plugin/jwt-extend.md
Normal file
@ -0,0 +1,142 @@
|
||||
# 和 jwt 集成
|
||||
|
||||
本插件的作用是让 Sa-Token 和 jwt 做一个整合。
|
||||
|
||||
---
|
||||
|
||||
### 1、引入依赖
|
||||
首先在项目已经引入 Sa-Token 的基础上,继续添加:
|
||||
|
||||
``` xml
|
||||
<!-- 在 thymeleaf 标签中使用 Sa-Token -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-jwt</artifactId>
|
||||
<version>${sa.top.version}</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
|
||||
### 2、配置秘钥
|
||||
在 `application.yml` 配置文件中配置 jwt 生成秘钥:
|
||||
``` yml
|
||||
sa-token:
|
||||
# jwt秘钥
|
||||
jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
|
||||
```
|
||||
注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了)
|
||||
|
||||
|
||||
### 3、注入jwt实现
|
||||
根据不同的整合规则,插件提供了三种不同的模式,你需要 **选择其中一种** 注入到你的项目中
|
||||
|
||||
<!------------------------------ tabs:start ------------------------------>
|
||||
|
||||
<!-- tab: Style 模式 -->
|
||||
Style 模式:Token 风格替换
|
||||
``` java
|
||||
@Configuration
|
||||
public class SaTokenConfigure {
|
||||
// Sa-Token 整合 jwt (Style模式)
|
||||
@Bean
|
||||
public StpLogic getStpLogicJwt() {
|
||||
return new StpLogicJwtForStyle();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- tab: Mix 模式 -->
|
||||
Mix 模式:混入部分逻辑
|
||||
``` java
|
||||
@Configuration
|
||||
public class SaTokenConfigure {
|
||||
// Sa-Token 整合 jwt (Style模式)
|
||||
@Bean
|
||||
public StpLogic getStpLogicJwt() {
|
||||
return new StpLogicJwtForMix();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- tab: Stateless模式 -->
|
||||
Stateless 模式:服务器完全无状态
|
||||
``` java
|
||||
@Configuration
|
||||
public class SaTokenConfigure {
|
||||
// Sa-Token 整合 jwt (Style模式)
|
||||
@Bean
|
||||
public StpLogic getStpLogicJwt() {
|
||||
return new StpLogicJwtForStateless();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!---------------------------- tabs:end ------------------------------>
|
||||
|
||||
### 4、开始使用
|
||||
然后我们就可以像之前一样使用 Sa-Token 了
|
||||
``` java
|
||||
/**
|
||||
* 登录测试
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/acc/")
|
||||
public class LoginController {
|
||||
|
||||
// 测试登录
|
||||
@RequestMapping("login")
|
||||
public SaResult login() {
|
||||
StpUtil.login(10001);
|
||||
return SaResult.ok("登录成功");
|
||||
}
|
||||
|
||||
// 查询登录状态
|
||||
@RequestMapping("isLogin")
|
||||
public SaResult isLogin() {
|
||||
return SaResult.ok("是否登录:" + StpUtil.isLogin());
|
||||
}
|
||||
|
||||
// 测试注销
|
||||
@RequestMapping("logout")
|
||||
public SaResult logout() {
|
||||
StpUtil.logout();
|
||||
return SaResult.ok();
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
访问上述接口,观察Token生成的样式
|
||||
``` java
|
||||
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoiMTAwMDEiLCJybiI6IjZYYzgySzBHVWV3Uk5NTTl1dFdjbnpFZFZHTVNYd3JOIn0.F_7fbHsFsDZmckHlGDaBuwDotZwAjZ0HB14DRujQfOQ
|
||||
```
|
||||
|
||||
|
||||
### 5、不同模式策略对比
|
||||
|
||||
注入不同模式会让框架具有不同的行为策略,以下是三种模式的差异点(为方便叙述,以下比较以同时引入 jwt 与 Redis 作为前提):
|
||||
|
||||
| 功能点 | Style 模式 | Mix 模式 | Stateless 模式 |
|
||||
| :-------- | :-------- | :-------- | :-------- |
|
||||
| Token风格 | jwt风格 | jwt风格 | jwt风格 |
|
||||
| 登录数据存储 | Redis中 | Token中 | Token中 |
|
||||
| Session存储 | Redis中 | Redis中 | 无Session |
|
||||
| 注销下线 | 前后端双清数据 | 前后端双清数据 | 前端清除数据 |
|
||||
| 踢人下线API | 支持 | 不支持 | 不支持 |
|
||||
| 登录认证 | 支持 | 支持 | 支持 |
|
||||
| 角色认证 | 支持 | 支持 | 支持 |
|
||||
| 权限认证 | 支持 | 支持 | 支持 |
|
||||
| timeout 有效期 | 支持 | 支持 | 支持 |
|
||||
| activity-timeout 有效期 | 支持 | 支持 | 不支持 |
|
||||
| id反查Token | 支持 | 支持 | 不支持 |
|
||||
| 会话管理 | 支持 | 部分支持 | 不支持 |
|
||||
| 注解鉴权 | 支持 | 支持 | 支持 |
|
||||
| 账号封禁 | 支持 | 支持 | 不支持 |
|
||||
| 身份切换 | 支持 | 支持 | 支持 |
|
||||
| 二级认证 | 支持 | 支持 | 支持 |
|
||||
| 模式总结 | Token风格替换 | jwt 与 Redis 逻辑混合 | 完全舍弃Redis,只用jwt |
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
<artifactId>sa-token-core</artifactId>
|
||||
<version>${sa-token-version}</version>
|
||||
</dependency>
|
||||
<!-- hutool -->
|
||||
<!-- hutool (jwt) -->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
|
@ -187,7 +187,7 @@ public class StpLogicJwtForMix extends StpLogic {
|
||||
// ------------------- 会话管理 -------------------
|
||||
|
||||
/**
|
||||
* 根据条件查询Token
|
||||
* [禁用] 根据条件查询Token
|
||||
*/
|
||||
@Override
|
||||
public List<String> searchTokenValue(String keyword, int start, int size) {
|
||||
|
@ -4,24 +4,24 @@ import cn.dev33.satoken.stp.StpLogic;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Token-Style
|
||||
* Sa-Token 整合 jwt -- Style模式
|
||||
* @author kong
|
||||
*
|
||||
*/
|
||||
public class StpLogicJwtForTokenStyle extends StpLogic {
|
||||
public class StpLogicJwtForStyle extends StpLogic {
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Token-Style
|
||||
* Sa-Token 整合 jwt -- Style模式
|
||||
*/
|
||||
public StpLogicJwtForTokenStyle() {
|
||||
public StpLogicJwtForStyle() {
|
||||
super(StpUtil.TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化StpLogic, 并指定账号类型
|
||||
* Sa-Token 整合 jwt -- Style模式
|
||||
* @param loginType 账号体系标识
|
||||
*/
|
||||
public StpLogicJwtForTokenStyle(String loginType) {
|
||||
public StpLogicJwtForStyle(String loginType) {
|
||||
super(loginType);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user