首页 > 其他分享 >JWT的配置使用

JWT的配置使用

时间:2025-01-14 20:43:05浏览次数:1  
标签:return String jsonwebtoken 配置 JWT key 使用 import public

  1. 首先引入依赖
pom.xml
<dependencies>
<!-- JWT -->
  <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
  </dependency>
  <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
  </dependency>
  <dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
  </dependency>
</dependencies>
  1. JWT 工具类
JwtTokenHelper
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.security.SignatureException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.CredentialsExpiredException;
import org.springframework.stereotype.Component;

import java.security.Key;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Base64;
import java.util.Date;

/**
 * @description: JWT 操作工具类
 * @author: YCcLin
 * @date: 2025/1/14
 **/
@Component
public class JwtTokenHelper implements InitializingBean {

    // 签发人
    @Value(value = "${jwt.issuer}")
    private String issuer;

    // 密钥
    private Key key;

    // JWT 解析
    private JwtParser jwtParser;

    /**
     * 解码配置文件中配置的 Base64 编码的 secret 为秘钥
     *
     * @param base64Key
     */
    public void setBase64Key(@Value("${jwt.secret}") String base64Key) {
        key = Keys.hmacShaKeyFor(Base64.getDecoder().decode(base64Key));
    }

    /**
     * 初始化 JwtParser
     *
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        // 考虑到不同服务器之间可能存在时钟偏移,setAllowedClockSkewSeconds 用于设置能够容忍的最大的时钟误差
        jwtParser = Jwts.parserBuilder().requireIssuer(issuer)
                .setSigningKey(key).setAllowedClockSkewSeconds(10)
                .build();
    }

    /**
     * 生成 Token
     *
     * @param username
     * @return
     */
    public String generateToken(String username) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime expireTime = now.plusHours(1);
        return Jwts.builder().setSubject(username)
                .setIssuer(issuer).signWith(key)
                .setIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()))
                .setExpiration(Date.from(expireTime.atZone(ZoneId.systemDefault()).toInstant()))
                .compact();
    }

    /**
     * 解析 Token
     *
     * @param token
     * @return
     */
    public Jws<Claims> parseToken(String token) {
        try {
            return jwtParser.parseClaimsJws(token);
        } catch (UnsupportedJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
            throw new BadCredentialsException("Token 不可用", e);
        } catch (ExpiredJwtException e) {
            throw new CredentialsExpiredException("Token 失效", e);
        }
    }

    /**
     * 生成一个 Base64 的安全秘钥
     *
     * @return
     */
    private static String generateBase64Key() {
        // 生成安全秘钥
        Key secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS512);
        // 将密钥进行 Base64 编码
        return Base64.getEncoder()
                .encodeToString(secretKey.getEncoded());
    }

    public static void main(String[] args) {
        String key = generateBase64Key();
        System.out.println("key: " + key);
    }
}

标签:return,String,jsonwebtoken,配置,JWT,key,使用,import,public
From: https://www.cnblogs.com/pxxl/p/18671558

相关文章

  • 使用COM对AOT程序进行插件开发
    编写大型项目的时候,经常需要引入插件系统以便对功能进行扩展,同时降低功能间的耦合性。但一般的插件系统大量运用反射技术,并且需要动态加载、卸载插件,听起来和AOT格格不入。确实,在AOT运行环境下,没有.NET运行时,这限制我们只能加载同样是AOT(或直接由native语言)编译的库。那么如何......
  • 使用NVENC API编码D3D12材质
    前言  之前在写图形引擎的时候就有个想法,想让我的图形引擎以一个固定的时间步进(DeltaTime)来渲染材质,并且把连续渲染的材质以视频的方式保存下来。其实我很久之前就把这个东西实现了,最近也是修改了下代码,准备写一篇关于这个的随笔。介绍  看了些网上的视频以及相关的文章,把......
  • 【Linux】8.Linux基础开发工具使用(2)
    文章目录1.Linux编译器-gcc/g++使用关于sudo1.1背景知识1.2gcc如何完成1.2.1预处理(进行宏替换)1.2.2编译(生成汇编)1.2.3汇编(生成机器可识别代码)1.2.4连接(生成可执行文件或库文件)1.2.5总结1.3函数库(重要概念)我们的`.o`和库是怎么链接的呢?函数库一般分为静态库......
  • 如何使用 AI技术修复不清晰、受损、不完美的图片?
    现如今AI技术为我们带来了诸多便利,其中AI修复图片功能更是让那些破损、模糊的照片重获新生。无论是珍贵的老照片,还是因各种原因受损的图片,借助AI的力量都能实现完美修复。今天,就来给大家详细讲讲如何使用AI修复图片。AI修复图片的原理AI修复图片主要基于深度学习技......
  • 【建议搜藏】最新版IDEA2024.3.1.1简介及使用
    IntelliJIDEA介绍IntelliJIDEA是一款用于Java语言开发的集成开发环境(IDE)。IntelliJIDEA被业界公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超棒的。IntelliJIDEA由JetBra......
  • Windows下Git Bash的tar命令使用
    Administrator@WIN-5B2ST4S1K5HMINGW64~/Documents/spark$lsspark-3.5.4-bin-hadoop3.tgzspark-3.5.4-bin-without-hadoop.tgzAdministrator@WIN-5B2ST4S1K5HMINGW64~/Documents/spark$tar-xspark-3.5.4-bin-hadoop3.tgz./tar:Refusingtoreadarchivecon......
  • 多模态大模型InterVL2.5使用记录
    本文记录在本地安装和测试InterVL2.5(26B版本)论文:https://arxiv.org/abs/2412.05271Huggingface模型权重下载页:https://huggingface.co/collections/OpenGVLab/internvl25-673e1019b66e2218f68d7c1cGithub:https://github.com/OpenGVLab/InternVL本地硬件:RTX30901.创建环......
  • 探索AI与鸿蒙开发新领域:从《星火AI使用指南》到《鸿蒙应用开发宝典》
    探索AI与鸿蒙开发前言AI智能化办公讯飞星火AI使用方法与技巧从入门到精通内容简介获取方式鸿蒙HarmonyOS应用开发从入门到精通内容简介获取方式总结前言在数字化的今天,科技的飞速发展让我们每天都在面临新的挑战和机遇。尤其是对于那些追求效率、寻求突破的职场人......
  • ubuntu 使用linuxdeployqt打包Qt程序
    文章目录准备工作打包遇到的问题配置启动准备工作下载linuxdeployqt下载地址,下载这个xxx.Appiamge文件即可配置linuxdeployqt将下载得到的xxx.Appiamge,移动到/usr/local/bin目录下,这样,我们就可以在其他目录访问了为了方便使用我们可以将其改一下名字并加上......
  • win快捷键及DOS命令使用
    Win快捷键Tab:切换菜单shift+ctrl:切换输入法win:打开开始菜单win+D:回到桌面win+E:打开我的电脑ctrl+Shift+ESC:任务管理器win+Tab:应用程序切换打开CMD的方式开始--搜索命令提示符win+r--输入cmd(推荐使用)在任意文件下面,按住shift键+鼠......