From beb8b9745daa1dafd4558125d38212e9c269256a Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Mon, 18 Nov 2024 10:25:13 +0800 Subject: [PATCH] =?UTF-8?q?Jwt=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/pojo/constant/PatternRegex.java | 2 +- .../pojo/constant/SecurityConstants.java | 2 +- .../java/com/njcn/common/utils/JwtUtil.java | 64 +++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 njcn-common/src/main/java/com/njcn/common/utils/JwtUtil.java diff --git a/njcn-common/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java b/njcn-common/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java index 1434e57..fa07a12 100644 --- a/njcn-common/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java +++ b/njcn-common/src/main/java/com/njcn/common/pojo/constant/PatternRegex.java @@ -41,7 +41,7 @@ public interface PatternRegex { /** * 登录名只能输入3-16位的英文字母或数字 */ - String LOGIN_NAME_REGEX = "^[a-zA-Z_.]{1}[a-zA-Z0-9_.]{2,15}$"; + String LOGIN_NAME_REGEX = "^[a-zA-Z]{1}[a-zA-Z0-9]{2,15}$"; /** * 手机号必须有11位,并且为数字,是正常的手机·号码开头 diff --git a/njcn-common/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java b/njcn-common/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java index ecbe190..45d0927 100644 --- a/njcn-common/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java +++ b/njcn-common/src/main/java/com/njcn/common/pojo/constant/SecurityConstants.java @@ -17,7 +17,7 @@ public interface SecurityConstants { /** * JWT令牌前缀 */ - String AUTHORIZATION_PREFIX = "bearer "; + String AUTHORIZATION_PREFIX = "Bearer "; /** * Basic认证前缀 diff --git a/njcn-common/src/main/java/com/njcn/common/utils/JwtUtil.java b/njcn-common/src/main/java/com/njcn/common/utils/JwtUtil.java new file mode 100644 index 0000000..0cb6fce --- /dev/null +++ b/njcn-common/src/main/java/com/njcn/common/utils/JwtUtil.java @@ -0,0 +1,64 @@ +package com.njcn.common.utils; + +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; + +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + +/** + * @author caozehui + * @data 2024/11/18 + */ +public class JwtUtil { + /** + * 过期时间(单位:秒) + */ + public static final int ACCESS_EXPIRE = 60 * 60 * 24; + + private final static String SECRET = "da3f9a7ad5a7d9dd5a7d9dd5a7d9d"; + + /** + * jwt主题 + */ + private final static String SUBJECT = "NJCN_PQS9100"; + + /** + * jwt签发者 + */ + private final static String JWT_ISS = "NJCN"; + + public static String generateToken(String userId) { + Map headers = new HashMap<>(); + headers.put("typ", "JWT"); + headers.put("alg", "HS256"); + Map payload = new HashMap<>(); + payload.put("userId", userId); + payload.put("exp", Instant.now().plusSeconds(ACCESS_EXPIRE).getEpochSecond()); + payload.put("sub", SUBJECT); + payload.put("iss", JWT_ISS); + payload.put("iat", Instant.now().getEpochSecond()); + return JWTUtil.createToken(headers, payload, SECRET.getBytes(StandardCharsets.UTF_8)); + } + + public static Map parseToken(String token) { + return JWTUtil.parseToken(token) + .setKey(SECRET.getBytes(StandardCharsets.UTF_8)) + .getPayload() + .getClaimsJson(); + } + + public static void invalidateToken(String token) { + JWT.of(token).setPayload("exp", Instant.now().getEpochSecond()); + } + + public static void main(String[] args) { + String token = generateToken("123456"); + System.out.println(token); + Map payload = parseToken(token); + System.out.println(payload); + invalidateToken(token); + } +}