1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package com.zhentao.tool;
- import com.zhentao.enums.ApiServerException;
- import com.zhentao.exception.AsynException;
- import io.jsonwebtoken.Claims;
- import io.jsonwebtoken.JwtBuilder;
- import io.jsonwebtoken.Jwts;
- import io.jsonwebtoken.SignatureAlgorithm;
- import javax.crypto.spec.SecretKeySpec;
- import javax.xml.bind.DatatypeConverter;
- import java.security.Key;
- import java.util.Date;
- public class TokenUtils {
- public static final String SECRET = "cjyfutu1688";
- public static String createJwtToken(String id) {
- String issuer = "www.futureading.com";
- String subject = "65532781@qq.com";
- long ttlMillis = 3600000; // 例如,设置token有效期为1小时
- return createJwtToken(id, issuer, subject, ttlMillis);
- }
- public static String createJwtToken(String id, String issuer, String subject, long ttlMillis) {
- SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
- long nowMillis = System.currentTimeMillis();
- Date now = new Date(nowMillis);
- byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET);
- Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
- JwtBuilder builder = Jwts.builder().setId(id)
- .setIssuedAt(now)
- .setSubject(subject)
- .setIssuer(issuer)
- .signWith(signatureAlgorithm, signingKey);
- if (ttlMillis >= 0) {
- long expMillis = nowMillis + ttlMillis;
- Date exp = new Date(expMillis);
- builder.setExpiration(exp);
- }
- return builder.compact();
- }
- public static Claims parseJWT(String jwt) {
- Claims claims = Jwts.parser()
- .setSigningKey(DatatypeConverter.parseBase64Binary(SECRET))
- .parseClaimsJws(jwt).getBody();
- return claims;
- }
- public static Long getUserId(String token) {
- Claims claims = null;
- try {
- claims = parseJWT(token);
- } catch (Exception e) {
- throw new AsynException(ApiServerException.TOKEN_ERR);
- }
- if (null == claims) {
- throw new AsynException(ApiServerException.TOKEN_ERR);
- }
- String id = claims.getId();
- Long userId = Long.valueOf(id);
- return userId;
- }
- /**
- * 检查token是否过期
- * @param jwt 要检查的token
- * @return 如果token过期返回true,否则返回false
- */
- public static boolean isTokenExpired(String jwt) {
- Claims claims = parseJWT(jwt);
- Date exp = claims.getExpiration();
- if (exp == null) {
- // 如果没有设置过期时间,可以认为token不过期
- return false;
- }
- return exp.before(new Date()); // 比较当前时间和过期时间
- }
- public static void main(String[] args) {
- String token = TokenUtils.createJwtToken("admin");
- System.out.println("Token: " + token);
- System.out.println("Is expired: " + TokenUtils.isTokenExpired(token));
- }
- }
|