SpringBoot项目Sa-token框架整合JWT

😀大家好!我是向阳🌞,一个想成为优秀全栈开发工程师的有志青年!	
📔今天来说一说如何在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}携带业务相关声明
SignatureHMACSHA256(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 简单模式)
    @Bean
    public StpLogic getStpLogicJwt() {
        return new StpLogicJwtForSimple();
    }
}

3.4 自定义jwt算法

/**
 * 自定义 SaJwtUtil 生成 token 的算法 
 */
@PostConstruct
public void setSaJwtTemplate() {
    SaJwtUtil.setSaJwtTemplate(new SaJwtTemplate() {
        @Override
        public String generateToken(JWT jwt, String keyt) {
            System.out.println("------ 自定义了 token 生成算法");
            return super.generateToken(jwt, keyt);
        }
    });
}

到这里我们就已经整合完jwt了,我们这个时候再去调用之前的登录接口,生成的token值就是jwt风格了。

4.结语

下一章预告:我们在每次重启项目后我们就需要重新登录,我们该如何解决这个问题呢?

——👦[作者]:向阳256
——⏳[更新]:2025.4.3
——🥰本人技术有限,如果有不对指正需要更改或者有更好的方法,欢迎到评论区留言。
### 如何将 sa-token 1.42.0 与 JWT 集成 为了将 sa-token 版本 1.42.0 和 JWT 进行集成,可以通过引入 `sa-token-jwt` 模块并完成必要的配置来实现。以下是详细的说明: #### 添加依赖项 在 Maven 项目中,需要在 `pom.xml` 文件中添加以下两个依赖项: - **sa-token-spring-boot-starter**: 提供 sa-token 的核心功能。 - **sa-token-jwt**: 封装了 JWT 功能,便于生成和解析 JWT 样式的 Token。 ```xml <!-- Sa-Token 核心模块 --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.42.0</version> </dependency> <!-- Sa-Token 整合 JWT --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-jwt</artifactId> <version>1.42.0</version> </dependency> ``` 以上代码片段展示了如何通过 Maven 引入所需的依赖[^1]。 #### 配置文件设置 在 Spring Boot 应用程序的 `application.yml` 或 `application.properties` 中,需对 sa-token 进行基础配置。例如,启用 JWT 支持、指定密钥等参数。 对于 YAML 格式,如下所示: ```yaml sa-token: # 开启 token 是否为 jwt 类型,默认 false is-jwt: true # 自定义 jwt 密钥 (必填),建议 256 位字符串长度 jwt-secret-key: your_custom_jwt_secret_key_256_bits_length # token 名称 (默认值: satoken) token-name: satoken # 超时时间,单位秒(此处设为一天) timeout: 86400 ``` 这些配置选项允许开发者自定义 JWT 行为,比如是否开启 JWT 支持、加密秘钥以及过期时间等[^1]。 #### 使用示例 下面是一个简单的 Java 示例,展示如何基于 sa-token 创建和验证带有 JWTToken 值。 ```java import cn.dev33.satoken.SaManager; import cn.dev33.satoken.stp.StpUtil; public class SaTokenJwtExample { public static void main(String[] args) { // 登录操作,模拟用户 ID 为 10001 的用户登录 StpUtil.login(10001); // 获取当前用户的 Token 值 String tokenValue = StpUtil.getTokenValue(); System.out.println("Generated Token Value: " + tokenValue); // 验证 Token 是否有效 boolean isValid = StpUtil.checkLoginByObject(tokenValue); System.out.println("Is Token Valid? " + isValid); // 注销登录 StpUtil.logout(); } } ``` 此代码演示了如何利用 sa-token 完成基本的身份认证流程,包括创建 Token、验证有效性及登出等功能。 #### 关于性能优化与安全性考量 当使用 sa-token 结合 JWT 时,应特别注意以下几个方面: - **密钥管理**:确保所使用的 `jwt-secret-key` 不会被泄露给未经授权的人士。 - **超时机制**:合理设定 Token 的有效期以平衡用户体验与系统安全之间的关系。 - **存储方式**:推荐采用 HTTPS 协议保护数据传输过程中免受中间人攻击的影响;同时考虑结合 Redis 缓存进一步提升大规模并发环境下的效率[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值