From 5d7b65670282a4fad015e37d567cfa171b162052 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期二, 20 五月 2025 12:25:19 +0800 Subject: [PATCH] 基础代码 --- pt-errand/src/main/java/com/ruoyi/errand/utils/JwtUtil.java | 71 +++++++++++++++++++++++++++++++++++ 1 files changed, 71 insertions(+), 0 deletions(-) diff --git a/pt-errand/src/main/java/com/ruoyi/errand/utils/JwtUtil.java b/pt-errand/src/main/java/com/ruoyi/errand/utils/JwtUtil.java new file mode 100644 index 0000000..4590c8a --- /dev/null +++ b/pt-errand/src/main/java/com/ruoyi/errand/utils/JwtUtil.java @@ -0,0 +1,71 @@ +package com.ruoyi.errand.utils; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Component +public class JwtUtil { + + /** + * 用户生成jwt令牌相关配置 + */ + private static final String secretKey = "xx"; + private static final long ttl =7200000; + private static final String tokenName = "Authorization"; + + /** + * 生成jwt + * 使用Hs256算法, 私匙使用固定秘钥 + * @param claims 设置的信息 + * @return + */ + + public static Map<String, Object> createJWT( Map<String, Object> claims) { + Map<String, Object> jwtMap = new HashMap<>(); + // 指定签名的时候使用的签名算法,也就是header那部分 + SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; + + // 生成JWT的时间 + long expMillis = System.currentTimeMillis() + ttl; + Date exp = new Date(expMillis); + + // 设置jwt的body + JwtBuilder builder = Jwts.builder() + // 如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的 + .setClaims(claims) + // 设置签名使用的签名算法和签名使用的秘钥 + .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8)) + // 设置过期时间 + .setExpiration(exp); + jwtMap.put("token", builder.compact()); + jwtMap.put("exp", expMillis); + return jwtMap; + } + + /** + * Token解密 + * @param token 加密后的token + * @return + */ + public static Claims parseJWT( String token) { + // 得到DefaultJwtParser + Claims claims = Jwts.parser() + // 设置签名的秘钥 + .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8)) + // 设置需要解析的jwt + .parseClaimsJws(token).getBody(); + return claims; + } + + public String getTokenName() { + return tokenName; + } +} \ No newline at end of file -- Gitblit v1.7.1