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

工具类:JWT

工具类:JWT

  • 依赖
  • JwtUtil.java

依赖

    <!--     创建、解析 和 验证JSON Web Tokens (JWT)-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

JwtUtil.java

package com.nnutc.common.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

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

public class JwtUtil {
    private static final String SECRET_KEY = "1ost"; // 替换为你的密钥
    private static final long EXPIRATION_TIME = 3600000; // 1小时

    /**
     * 生成 JWT
     *
     * @param subject 主题,可以是用户的唯一标识
     * @return 生成的 JWT
     */
    public static String generateToken(String subject) {
        Map<String, Object> claims = new HashMap<>();
        JwtBuilder builder = Jwts.builder()
                .setClaims(claims)
                .setSubject(subject)
                .setIssuedAt(new Date(System.currentTimeMillis()))
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY);
        return builder.compact();
    }

    /**
     * 验证 JWT
     *
     * @param token 要验证的 JWT
     * @return 是否有效
     */
    public static boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 从 JWT 中提取主题
     *
     * @param token 要提取的 JWT
     * @return 主题
     */
    public static String getSubjectFromToken(String token) {
        Claims claims = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
        return claims.getSubject();
    }
}

http://www.kler.cn/a/326671.html

相关文章:

  • 在线PDF转图片网站
  • 蓝牙资讯|苹果AirPods Pro 2推出听力测试、助听器和听力保护等功能
  • 【深度学习基础】深入理解 卷积与卷积核
  • RESTful风格
  • 关于wordpress instagram feed 插件 (现更名为Smash Balloon Social Photo Feed)
  • C++面向对象设计模式——单例模式
  • 【AI学习】Lilian Weng:Extrinsic Hallucinations in LLMs(LLM 的外在幻觉)
  • TS-AI:一种用于多模态个体化脑区划分的深度学习管道,并结合任务对比合成|文献速递-Transformer架构在医学影像分析中的应用
  • 生产环境升级mysql流程及配置主从服务
  • YOLOv8改进 | 主干篇,YOLOv8改进主干网络为华为的轻量化架构GhostNetV1
  • C++ 左值右值引用梳理(一)
  • 蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)
  • python 如何引用变量
  • LeetCode 每日一题 最佳观光组合
  • 水波荡漾效果+渲染顺序+简单UI绘制
  • Chromium 屏蔽“缺少 Google API 密钥,因此 Chromium 的部分功能将无法使用。”提示 c++
  • Conda 虚拟环境使用指南,python,anaconda,miniconda
  • MySQL InnoDB 事务commit逻辑分析
  • C++的new关键字
  • 如何在Android上运行Llama 3.2
  • 关于TrustedInstaller权限
  • c++-类和对象-设计立方体类
  • 每天学习一个技术栈 ——【Django Channels】篇(2)
  • ansible实现远程创建用户
  • [BUUCTF从零单排] Web方向 03.Web入门篇之sql注入-1(手工注入详解)
  • Java 编码系列:注解处理器详解与面试题解析