SpringBoot项目Sa-token框架整合JWT
- 1.前言
- 2.JWT是什么?
- 2.1 JWT核心原理
- 2.2 JWT核心优势
- 3.项目整合JWT
- 3.1 导入依赖
- 3.2 配置文件进行配置
- 3.3 注入jwt
- 3.4 自定义jwt算法
- 4.结语
😀大家好!我是向阳🌞,一个想成为优秀全栈开发工程师的有志青年!
📔今天来说一说如何在SpringBoot项目Sa-token框架中整合JWT。
1.前言
上一章节链接:SpringBoot整合sa-token
在上一个篇章当中,我们在SpringBoot项目中整合了sa-token框架,并且实现了无cookie登录态(博客链接:SpringBoot整合sa-token),这一小节我们来整合我们来整合jwt,让我们的token更加安全。
2.JWT是什么?
2.1 JWT核心原理
JWT(JSON Web Token)是一种开放标准(RFC 7519),采用紧凑的URL安全方式传递声明信息,由三部分组成:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. // Header(头部)
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. // Payload(负载)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // Signature(签名)
JWT结构解析
组成部分 | 内容示例 | 说明 |
---|---|---|
Header | {“alg”: “HS256”, “typ”: “JWT”} | 声明令牌类型和签名算法 |
Payload | {“sub”: “123”, “name”: “Alice”, “exp”: 1735689600} | 携带业务相关声明 |
Signature | HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret) | 防篡改数字签名 |
2.2 JWT核心优势
- 自包含性:Payload可存储用户基本信息,减少数据库查询
- 防篡改验证:通过签名机制确保数据完整性
- 跨语言支持:标准化的JSON数据处理
- 时效控制:通过exp等标准声明自动过期
- OAuth2.0友好:天然适配现代授权标准
3.项目整合JWT
3.1 导入依赖
首先我们引入依赖sa-token-jwt,sa-token框架与jwt进行了封装,让我们很容易的就可以生成jwt风格的token值。
<!-- Sa-Token 整合 jwt -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-jwt</artifactId><version>1.41.0</version>
</dependency>
3.2 配置文件进行配置
接下来我们在yml配置文件中进行配置。
sa-token:# 其他的配置不变,与上一章节一致...# jwt秘钥,这里的密钥填你自己的想填的就好jwt-secret-key: xiangyang
3.3 注入jwt
这里官方给了三种方式,建议选择第一种,功能没有缺失,自己看自己的需求进行筛选。
@Configuration
public class SaTokenConfigure {// Sa-Token 整合 jwt (Simple 简单模式)@Beanpublic StpLogic getStpLogicJwt() {return new StpLogicJwtForSimple();}
}
3.4 自定义jwt算法
/*** 自定义 SaJwtUtil 生成 token 的算法 */
@PostConstruct
public void setSaJwtTemplate() {SaJwtUtil.setSaJwtTemplate(new SaJwtTemplate() {@Overridepublic String generateToken(JWT jwt, String keyt) {System.out.println("------ 自定义了 token 生成算法");return super.generateToken(jwt, keyt);}});
}
到这里我们就已经整合完jwt了,我们这个时候再去调用之前的登录接口,生成的token值就是jwt风格了。
4.结语
下一章预告:我们在每次重启项目后我们就需要重新登录,我们该如何解决这个问题呢?
——👦[作者]:向阳256
——⏳[更新]:2024.3.22
——🥰本人技术有限,如果有不对指正需要更改或者有更好的方法,欢迎到评论区留言。