spring boot3 集成jjwt(java-jwt)版本的

1、安装maven依赖

复制代码
<dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>4.5.1</version>
            <scope>compile</scope>
        </dependency>

2、新建用户模拟类,例如

复制代码
public class SystemUserVO extends BaseEntity {

    @NotNull(message = "账号不能为空")//空校验
    @NotBlank(message = "账号不能为空") //不能为空字符串
    private String account;

    private String password;

    @NotNull(message = "用户名不能为空")//空校验
    @NotBlank(message = "用户名不能为空") //不能为空字符串
    private String userName;


    private String nickName;

    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    private String email;

    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    private String phone;

    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthday;

    @NotNull(message = "性别不能为空")//空校验
    private Integer sex;

//    @NotNull(message = "用户平台不能为空")//空校验
    private Integer userType;

    @NotNull(message = "状态不能为空")//空校验
    private Integer status;
}

3、新建生成token类和解析方法

复制代码
package com.example.system_manage.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.system_manage.vo.SystemUserVO;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class JwtUtil {
    private static long expire_time = 1000 * 60 * 60 * 8;
    private static String signature = "xxxxxxxxx";

    public static String createToken(SystemUserVO user) {
        Date date = new Date(System.currentTimeMillis() + expire_time);
        Algorithm algorithm = Algorithm.HMAC256(signature);
        return JWT.create()
                // 将 user id 保存到 token 里面
                .withAudience(user.getId().toString())
                .withClaim("userName", user.getUserName())
                .withClaim("userId", user.getId())
                .withClaim("userAccount", user.getAccount())
                .withClaim("userType", user.getUserType())
                .withClaim("userTenantIds", user.getSystemUserTenantList().stream().map(v -> v.getUserTenantId().toString()).collect(Collectors.joining(",")))
                .withClaim("userRoleIds", user.getSystemUserRoleList().stream().map(v -> v.getRoleId().toString()).collect(Collectors.joining(",")))
                .withClaim("userDeptIds", user.getSystemUserDeptList().stream().map(v -> v.getDeptId().toString()).collect(Collectors.joining(",")))
                .withClaim("userPostIds", user.getSystemUserPostList().stream().map(v -> v.getPostId().toString()).collect(Collectors.joining(",")))
                // 60分钟后token过期
                .withExpiresAt(date)
                // token 的密钥
                .sign(algorithm);
    }


    /**
     * 接口解析token
     *
     * @param token
     * @return
     */
    public static Map<String, Object> getTokenInform(String token) {
        try {
            if (StringUtils.isBlank(token)) {
                throw new BusinessException("当前无验证令牌");
            }
            Algorithm algorithm = Algorithm.HMAC256(signature);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt=verifier.verify(token);
            Map<String, Object> result = new HashMap<>();
            result.put("userId", jwt.getClaim("userId").asLong().toString());
            result.put("userName", jwt.getClaim("userName").asString());
            result.put("userAccount", jwt.getClaim("userAccount").asString());
            result.put("userType", jwt.getClaim("userType").asInt());
            result.put("userTenantIds", jwt.getClaim("userTenantIds").asString());
            result.put("userRoleIds", jwt.getClaim("userRoleIds").asString());
            result.put("userDeptIds", jwt.getClaim("userDeptIds").asString());
            result.put("userPostIds", jwt.getClaim("userPostIds").asString());
            return result;
        } catch (JWTVerificationException exception) {
            throw new JWTVerificationException("登录过期,请重新登录");
        } catch (Exception e) {
            throw new BusinessException(e.getMessage());
        }
    }
}

4、然后在拦截器中进行控制,可参考我之前的文章
集成token

注意这个版本的需要把鉴权替换成我这篇文章的

相关推荐
摇滚侠4 分钟前
《On Java 中文版 基础卷》阅读笔记 复用 13
java·笔记·python
2601_968900776 分钟前
玻璃深加工的工艺窗口:4 道工序的温度与时间参数边界
android·java·javascript
用户2986985301410 分钟前
Python 将 Word 文档转换为 XML 的实践要点
后端·python·api
薛之谦_12 分钟前
用 Java 实现阿里云式 IAM 子用户管理:架构设计与表结构详解
java·python·阿里云
2601_9520477914 分钟前
金蝶云星空销售订单附件查询接口权威教程(BOS_Attachment)
python·机器人·钉钉
神仙别闹17 分钟前
基于Python Yolo实现绝缘子目标检测程序
python·yolo·目标检测
超级架构师34 分钟前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程
甜到心里的蛋糕41 分钟前
抖音评论自动回复机器人部署实践:无头 Chrome + DeepSeek + NapCat(2C2G 云主机)
java·jvm·chrome·python·抖音·deepseek
Java爱好狂.1 小时前
阿里1658页Java面试题总结(含答案)
java·后端·高并发·架构师·java面试·java面试题·java八股文
Thanks_ks1 小时前
从 0.1+0.2 不等于 0.3 说起:聊聊浮点数精度问题
java·python·数值计算·精度丢失·bigdecimal·浮点数·ieee754