<!-- JJWT (Java 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>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
/*
* Copyright [2025-present] [Liu Rongming]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wewetea.open.weadmin.common.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.io.Encoders;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.security.Key;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.function.Function;
public class JwtUtil {
// 密钥
private static final String BASE64_STRING_KEY_JWT = "oFd/+ENGA4riK9NtoJ59mDjoXna/fe2WNg6j/76p0sI=";
// 过期时间 单位毫秒
private static final long EXPIRATION_TIME = 3600000; // 1 hour in milliseconds
// 颁发者
private static final String ISSUER = "WeAdmin";
// 受众
// private static final String AUDIENCE = "http://localhost:8080/";
/**
* 生成一个Jwt Token
*
* @param subject
* @return
*/
public static String generateJwToken(String subject) {
Key key = Base64StringToJwtKey(BASE64_STRING_KEY_JWT);
Date issuedDate = new Date(System.currentTimeMillis());
Date ExpirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
String Id = UUID.randomUUID().toString().replace("-", "");
return Jwts.builder()
.setSubject(subject) // 设置主题,通常是用户ID或用户名 可以是JSON数据
.setIssuedAt(issuedDate) // 签发时间
.setExpiration(ExpirationDate) // 设置过期时间
.signWith(key, SignatureAlgorithm.HS256) // 使用HS256对称加密算法签名
// .setAudience(AUDIENCE)
.setIssuer(ISSUER) // 签发者
.setId(Id) // ID 可选
.compact();
}
/**
* 获取主题
* @param token
* @return String
*/
public static String extractSubject(String token) {
return extractClaim(token, Claims::getSubject);
}
/**
* 获取过期时间
* @param token
* @return
*/
public static Date extractExpiration(String token) {
return extractClaim(token, Claims::getExpiration);
}
/**
* 获取其他要求数据
* @param token
* @param claimsResolver
* @return
* @param <T>
*/
public static <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
final Claims claims = extractAllClaims(token);
return claimsResolver.apply(claims);
}
/**
* 获取所有要求数据
* @param token
* @return
*/
public static Claims extractAllClaims(String token) {
Key key = Base64StringToJwtKey(BASE64_STRING_KEY_JWT);
return Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token)
.getBody();
}
/**
* 是否过期
*
* @param token
* @return
*/
public static boolean isTokenExpired(String token) {
return extractExpiration(token).before(new Date());
}
/**
* 验证token是否有效
*
* @param token
* @param subject
* @return Boolean
*/
public static Boolean validateToken(String token, String subject) {
String extractedSubject = extractSubject(token);
return (extractedSubject.equals(subject) && !isTokenExpired(token));
}
/**
* 制作一个Jwt密钥
*
* @return String
*/
public static String generateNewJwtKeyForStore() {
SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);
return Encoders.BASE64.encode(secretKey.getEncoded());
}
/**
* 密钥转成字符串
* 用此方法生成,不担心密钥长度有要求
*
* @return String strBase64Key
*/
public static String JwtKeyToBase64String(Key key) {
return Encoders.BASE64.encode(key.getEncoded());
}
/**
* 字符密码还原成Key对象
*
* @param strBase64Key
* @return
*/
public static Key Base64StringToJwtKey(String strBase64Key) {
return Keys.hmacShaKeyFor(Decoders.BASE64.decode(strBase64Key));
}
public static void main(String[] args) throws Exception {
// 获取密钥
String newKey = generateNewJwtKeyForStore();
System.out.println("newKey:" + newKey);
// 验证是否能还原
Key key = Base64StringToJwtKey(newKey);
String strBase64Key = JwtUtil.JwtKeyToBase64String(key);
System.out.println("newKey:" + strBase64Key);
// 测试生成
String token = generateJwToken("admin");
System.out.printf("token:%s\n", token);
String subject = extractSubject(token);
Boolean isValid = validateToken(token, subject);
System.out.printf("isValid:%s\n", isValid);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date curentDate = new Date(System.currentTimeMillis());
System.out.printf("curentDate:%s\n", sdf.format(curentDate));
System.out.printf("subject:%s\n", subject);
Date expirationDate = extractExpiration(token);
System.out.printf("Expiration date:%s\n", sdf.format(expirationDate));
Claims claims = extractAllClaims(token);
System.out.println("args = " + claims.toString());
}
}
"C:\Program Files\Java\jdk-17.0.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2025.1\lib\idea_rt.jar=52123" -Dfile.encoding=UTF-8 -classpath C:\Users\liuwenjiang\Desktop\local\WeAdmin\we-admin\target\classes;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-thymeleaf\3.2.8\spring-boot-starter-thymeleaf-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter\3.2.8\spring-boot-starter-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot\3.2.8\spring-boot-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.2.8\spring-boot-autoconfigure-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.2.8\spring-boot-starter-logging-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\ch\qos\logback\logback-classic\1.5.18\logback-classic-1.5.18.jar;C:\Users\liuwenjiang\.m2\repository\ch\qos\logback\logback-core\1.5.18\logback-core-1.5.18.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.21.1\log4j-to-slf4j-2.21.1.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\logging\log4j\log4j-api\2.21.1\log4j-api-2.21.1.jar;C:\Users\liuwenjiang\.m2\repository\org\slf4j\jul-to-slf4j\2.0.13\jul-to-slf4j-2.0.13.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\liuwenjiang\.m2\repository\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\Users\liuwenjiang\.m2\repository\org\thymeleaf\thymeleaf-spring6\3.1.2.RELEASE\thymeleaf-spring6-3.1.2.RELEASE.jar;C:\Users\liuwenjiang\.m2\repository\org\thymeleaf\thymeleaf\3.1.2.RELEASE\thymeleaf-3.1.2.RELEASE.jar;C:\Users\liuwenjiang\.m2\repository\org\attoparser\attoparser\2.0.7.RELEASE\attoparser-2.0.7.RELEASE.jar;C:\Users\liuwenjiang\.m2\repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;C:\Users\liuwenjiang\.m2\repository\org\slf4j\slf4j-api\2.0.13\slf4j-api-2.0.13.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.2.8\spring-boot-starter-web-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.2.8\spring-boot-starter-json-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.15.4\jackson-datatype-jdk8-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.15.4\jackson-datatype-jsr310-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.15.4\jackson-module-parameter-names-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.2.8\spring-boot-starter-tomcat-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.40\tomcat-embed-core-10.1.40.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.40\tomcat-embed-el-10.1.40.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.40\tomcat-embed-websocket-10.1.40.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-web\6.2.6\spring-web-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-beans\6.2.6\spring-beans-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-webmvc\6.2.6\spring-webmvc-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-context\6.2.6\spring-context-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-expression\6.2.6\spring-expression-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-aop\3.2.8\spring-boot-starter-aop-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-aop\6.2.6\spring-aop-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\aspectj\aspectjweaver\1.9.22.1\aspectjweaver-1.9.22.1.jar;C:\Users\liuwenjiang\.m2\repository\org\projectlombok\lombok\1.18.34\lombok-1.18.34.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-security\3.2.8\spring-boot-starter-security-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\security\spring-security-config\6.2.5\spring-security-config-6.2.5.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\security\spring-security-core\6.2.5\spring-security-core-6.2.5.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\security\spring-security-crypto\6.2.5\spring-security-crypto-6.2.5.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\security\spring-security-web\6.2.5\spring-security-web-6.2.5.jar;C:\Users\liuwenjiang\.m2\repository\io\jsonwebtoken\jjwt-api\0.11.2\jjwt-api-0.11.2.jar;C:\Users\liuwenjiang\.m2\repository\io\jsonwebtoken\jjwt-impl\0.11.2\jjwt-impl-0.11.2.jar;C:\Users\liuwenjiang\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.11.2\jjwt-jackson-0.11.2.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.15.4\jackson-databind-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.15.4\jackson-annotations-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.15.4\jackson-core-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.2\jakarta.xml.bind-api-4.0.2.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.3\jakarta.activation-api-2.1.3.jar;C:\Users\liuwenjiang\.m2\repository\net\bytebuddy\byte-buddy\1.14.18\byte-buddy-1.14.18.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-core\6.2.6\spring-core-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-jcl\6.2.6\spring-jcl-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.2.8\spring-boot-starter-data-redis-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\io\lettuce\lettuce-core\6.3.2.RELEASE\lettuce-core-6.3.2.RELEASE.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-common\4.1.111.Final\netty-common-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-handler\4.1.111.Final\netty-handler-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-resolver\4.1.111.Final\netty-resolver-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-buffer\4.1.111.Final\netty-buffer-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.111.Final\netty-transport-native-unix-common-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-codec\4.1.111.Final\netty-codec-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\netty\netty-transport\4.1.111.Final\netty-transport-4.1.111.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\projectreactor\reactor-core\3.6.8\reactor-core-3.6.8.jar;C:\Users\liuwenjiang\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\data\spring-data-redis\3.2.8\spring-data-redis-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\data\spring-data-keyvalue\3.2.8\spring-data-keyvalue-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-tx\6.2.6\spring-tx-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-oxm\6.2.6\spring-oxm-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\commons\commons-pool2\2.12.1\commons-pool2-2.12.1.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\3.2.8\spring-boot-starter-data-jpa-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.2.8\spring-boot-starter-jdbc-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-jdbc\6.2.6\spring-jdbc-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\hibernate\orm\hibernate-core\6.4.9.Final\hibernate-core-6.4.9.Final.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\liuwenjiang\.m2\repository\org\jboss\logging\jboss-logging\3.5.3.Final\jboss-logging-3.5.3.Final.jar;C:\Users\liuwenjiang\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.6.Final\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\smallrye\jandex\3.1.2\jandex-3.1.2.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\classmate\1.6.0\classmate-1.6.0.jar;C:\Users\liuwenjiang\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.5\jaxb-runtime-4.0.5.jar;C:\Users\liuwenjiang\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.5\jaxb-core-4.0.5.jar;C:\Users\liuwenjiang\.m2\repository\org\eclipse\angus\angus-activation\2.0.2\angus-activation-2.0.2.jar;C:\Users\liuwenjiang\.m2\repository\org\glassfish\jaxb\txw2\4.0.5\txw2-4.0.5.jar;C:\Users\liuwenjiang\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;C:\Users\liuwenjiang\.m2\repository\org\antlr\antlr4-runtime\4.13.0\antlr4-runtime-4.13.0.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\data\spring-data-jpa\3.2.8\spring-data-jpa-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\data\spring-data-commons\3.2.8\spring-data-commons-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-orm\6.2.6\spring-orm-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-aspects\6.2.6\spring-aspects-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\com\mysql\mysql-connector-j\8.2.0\mysql-connector-j-8.2.0.jar;C:\Users\liuwenjiang\.m2\repository\com\oracle\database\jdbc\ojdbc11\21.9.0.0\ojdbc11-21.9.0.0.jar;C:\Users\liuwenjiang\.m2\repository\com\microsoft\sqlserver\mssql-jdbc\12.4.2.jre11\mssql-jdbc-12.4.2.jre11.jar;C:\Users\liuwenjiang\.m2\repository\org\postgresql\postgresql\42.6.2\postgresql-42.6.2.jar;C:\Users\liuwenjiang\.m2\repository\org\checkerframework\checker-qual\3.31.0\checker-qual-3.31.0.jar;C:\Users\liuwenjiang\.m2\repository\com\h2database\h2\2.2.224\h2-2.2.224.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.2.8\spring-boot-starter-cache-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\spring-context-support\6.2.6\spring-context-support-6.2.6.jar;C:\Users\liuwenjiang\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.8\caffeine-3.1.8.jar;C:\Users\liuwenjiang\.m2\repository\com\google\errorprone\error_prone_annotations\2.21.1\error_prone_annotations-2.21.1.jar;C:\Users\liuwenjiang\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.52\fastjson2-2.0.52.jar;C:\Users\liuwenjiang\.m2\repository\com\alibaba\fastjson2\fastjson2-extension-spring6\2.0.52\fastjson2-extension-spring6-2.0.52.jar;C:\Users\liuwenjiang\.m2\repository\com\alibaba\fastjson2\fastjson2-extension\2.0.52\fastjson2-extension-2.0.52.jar;C:\Users\liuwenjiang\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\liuwenjiang\.m2\repository\p6spy\p6spy\3.9.1\p6spy-3.9.1.jar;C:\Users\liuwenjiang\.m2\repository\org\springdoc\springdoc-openapi-starter-webmvc-ui\2.8.8\springdoc-openapi-starter-webmvc-ui-2.8.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springdoc\springdoc-openapi-starter-webmvc-api\2.8.8\springdoc-openapi-starter-webmvc-api-2.8.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springdoc\springdoc-openapi-starter-common\2.8.8\springdoc-openapi-starter-common-2.8.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-validation\3.2.8\spring-boot-starter-validation-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\hibernate\validator\hibernate-validator\8.0.1.Final\hibernate-validator-8.0.1.Final.jar;C:\Users\liuwenjiang\.m2\repository\io\swagger\core\v3\swagger-core-jakarta\2.2.30\swagger-core-jakarta-2.2.30.jar;C:\Users\liuwenjiang\.m2\repository\io\swagger\core\v3\swagger-annotations-jakarta\2.2.30\swagger-annotations-jakarta-2.2.30.jar;C:\Users\liuwenjiang\.m2\repository\io\swagger\core\v3\swagger-models-jakarta\2.2.30\swagger-models-jakarta-2.2.30.jar;C:\Users\liuwenjiang\.m2\repository\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\Users\liuwenjiang\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.15.4\jackson-dataformat-yaml-2.15.4.jar;C:\Users\liuwenjiang\.m2\repository\org\webjars\swagger-ui\5.21.0\swagger-ui-5.21.0.jar;C:\Users\liuwenjiang\.m2\repository\org\webjars\webjars-locator-lite\1.0.1\webjars-locator-lite-1.0.1.jar;C:\Users\liuwenjiang\.m2\repository\org\jspecify\jspecify\1.0.0\jspecify-1.0.0.jar;C:\Users\liuwenjiang\.m2\repository\com\belerweb\pinyin4j\2.5.1\pinyin4j-2.5.1.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\3.2.8\spring-boot-starter-actuator-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\3.2.8\spring-boot-actuator-autoconfigure-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\org\springframework\boot\spring-boot-actuator\3.2.8\spring-boot-actuator-3.2.8.jar;C:\Users\liuwenjiang\.m2\repository\io\micrometer\micrometer-observation\1.12.8\micrometer-observation-1.12.8.jar;C:\Users\liuwenjiang\.m2\repository\io\micrometer\micrometer-commons\1.12.8\micrometer-commons-1.12.8.jar;C:\Users\liuwenjiang\.m2\repository\io\micrometer\micrometer-jakarta9\1.12.8\micrometer-jakarta9-1.12.8.jar;C:\Users\liuwenjiang\.m2\repository\io\micrometer\micrometer-core\1.12.8\micrometer-core-1.12.8.jar;C:\Users\liuwenjiang\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\liuwenjiang\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar com.wewetea.open.weadmin.common.utils.JwtUtil
newKey:r0LTrz95Kk2FvcCOtYqnpbS6GRpp7NSmcFG7Hah+f94=
newKey:r0LTrz95Kk2FvcCOtYqnpbS6GRpp7NSmcFG7Hah+f94=
token:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTc0OTIxODYyOCwiZXhwIjoxNzQ5MjIyMjI4LCJpc3MiOiJXZUFkbWluIiwianRpIjoiMWNlYjJjNGI0OGUwNDdlMmI5YjM3ZTc1MGJhMWE0Y2MifQ.Pgq6G_YIksRNHGciuY7AGCj9j4E1DWWa-JYuy1tCf4U
isValid:true
curentDate:2025-06-06 22:03:48
subject:admin
Expiration date:2025-06-06 23:03:48
args = {sub=admin, iat=1749218628, exp=1749222228, iss=WeAdmin, jti=1ceb2c4b48e047e2b9b37e750ba1a4cc}