JWT的生成与验证

master
gxy 8 months ago
parent 2e01afd604
commit 0315abc925

@ -0,0 +1,130 @@
package com.example.api.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.*;
import java.util.logging.Logger;
/**
* JwtTokenUtil JSON Web Tokens (JWT)
* JWT
*/
public final class JwtTokenUtil {
// 在请求的 header 中的名字
public final static String TOKEN_HEADER = "Authorization";
// 一个星期过期的时间(毫秒)
public final static long REMEMBER_EXPIRATION_TIME = 1000 * 60 * 60 * 24 * 7;
// 一天过期的时间(毫秒)
public final static long EXPIRATION_TIME = 1000 * 60 * 60 * 24;
// 应用密钥,用于 JWT 签名
private static final String APP_SECRET = "logisticapi";
// JWT 前缀
private static final String PREFIX = "logistics:";
// 角色权限声明的键
private static final String ROLE_CLAIMS = "roles";
/**
* token
* @param token token
* @return token PREFIX true false
*/
public static boolean checkToken(String token) {
if ("null".equals(token) || token == null || "".equals(token)){
System.out.println("token为空");
return false;
}
return token.startsWith(PREFIX);
}
/**
* Token
* @param username
* @param roles
* @param expiration
* @return JWT
*/
public static String createToken(String username, String[] roles, long expiration) {
System.out.println("---------------------------");
System.out.println("username:"+username);
System.out.println("-----------------------");
Map<String, Object> map = new HashMap<>();
map.put(ROLE_CLAIMS, roles);
return PREFIX + Jwts.builder()
.setClaims(map)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expiration))
.signWith(SignatureAlgorithm.HS256, APP_SECRET)
.setSubject(username)
.compact();
}
/**
* token body
* @param token token
* @return token claims
*/
private static Claims getTokenClaims(String token) {
token = token.substring(PREFIX.length());
Claims claims = null;
try {
claims = Jwts.parser()
.setSigningKey(APP_SECRET)
.parseClaimsJws(token)
.getBody();
} catch (ExpiredJwtException e) {
e.printStackTrace();
}
return claims;
}
/**
* Token
* @param token token
* @return token
*/
public static String getUsername(String token) {
System.out.println("----gettoken----");
System.out.println(getTokenClaims(token));
System.out.println("-------------");
System.out.println(getTokenClaims(token).getSubject());
System.out.println("-------------");
return getTokenClaims(token).getSubject();
}
/**
* Token
* @param token token
* @return token
*/
public static List<String> getTokenRoles(String token) {
List<String> roles = new ArrayList<>();
Object object = getTokenClaims(token).get(ROLE_CLAIMS);
if (object instanceof ArrayList<?>) {
for (Object o : (List<?>) object) {
roles.add((String) o);
}
}
for (String role : roles) {
System.out.println(role);
}
return roles;
}
/**
* Token
* @param token token
* @return token true false
*/
public static boolean isExpiration(String token) {
return getTokenClaims(token).getExpiration().before(new Date());
}
}
Loading…
Cancel
Save