当前位置: 首页 > news >正文

授权与认证之jwt(一)创建Jwt工具类

JWT的Token要经过加密才能返回给客户端,包括客户端上传的Tokn,后端项目需要验证核
实。于是我们需要一个WT工具类,用来加密Token和验证Token的有效性。

一、导入依赖

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

二、定义密钥和过期时间

在application文件中加入,建议大家把密钥和过期时间定义到Spring Boot配置文件中,然后再值注入到javaBean中,这样维护起来比较方便。

emos:
  jwt:
    #密钥
    secret: abc123456
    #令牌过期时间(天)
    expire: 5
    #令牌缓存时间(天)
    cache-expire: 10

三、创建jwt工具类

@Component
@Slf4j
public class JwtUtil {

    @Value("${emos.jwt.secret}")  //读取的就是application文件中的数值
    private String secret;

    @Value("${emos.jwt.expire}")
    private int expire;

    //创建令牌
    private String createToken(int userId) {
        //根据expire算下过期时间在什么时候
        DateTime date = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, 5);

        //生成密钥
        Algorithm algorithm= Algorithm.HMAC256(secret);

        //创建内部类绑定userid,密钥和过期时间
        JWTCreator.Builder builder= JWT.create();

        builder.withClaim("userId", userId);
        builder.withExpiresAt(date);

        //生成的令牌
        String token = builder.sign(algorithm);
        return token;
    }

    //从令牌对象反向获取userid
    public int getUserId(String token) {
        DecodedJWT jwt = JWT.decode(token);

        Integer userId = jwt.getClaim("userId").asInt();
        return userId;
    }

    //验证令牌有效性
    public void verifyToken(String token) {
        //验证令牌内容有效性 创建算法对象
        Algorithm algorithm = Algorithm.HMAC256(token);

        //创建验证对象
        JWTVerifier build = JWT.require(algorithm).build();
        //验证token是否有问题
        build.verify(token);
    }
}

相关文章:

  • macOS Sequoia 15.3 M3 Pro芯片 iOS 开发环境配置记录(最新)
  • ZYNQ-PL实践课堂(四)IP核之RAM
  • 经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
  • python 爬虫用bs4 或者叫Beautiful Soup
  • CSS—text文本、font字体、列表list、表格table、表单input、下拉菜单select
  • 关于后端使用Boolean或boolean时前端收到的参数的区别
  • 基于51单片机的智能温控器设计与实现
  • 哈希算法--猜数字游戏
  • 基于AX58100 EtherCAT从站开发
  • 考研408数据结构线性表核心知识点与易错点详解(附真题示例与避坑指南)
  • llama-factory
  • 132. 分割回文串 II | 最少分割次数
  • Linux网络相关概念和重要知识(1)(网络协议、网络通信)
  • Hashmap
  • FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)
  • Pytorch使用手册—Raspberry Pi 4 上的实时推理(30 FPS!)(专题三十六)
  • C++对象特性
  • Spring Boot分层架构的优势
  • 记忆化搜索(典型算法思想)—— OJ例题算法解析思路
  • SAP-ABAP:SAP的MM模块BAPI的详细介绍
  • 各种类型网站建设售后完善/计算机培训机构排名前十
  • 东莞 网站建设 保健品/推广之家官网
  • 网站制作背景图片/什么是信息流广告
  • 手机访问网站建设中/优秀软文范例200字
  • 安丘网站建设报价/竞价排名点击
  • 网站开发人员招聘it管理/北京疫情最新数据