令牌管理工具介绍
用戶登錄簽發TOKEN
(1)生成令牌工具類
在common中創建類entity.JwtUtil,主要輔助生成Jwt令牌信息,代碼如下:
package entity;import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm;import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; import java.util.Date;/*** 描述** @author www.leon.com* @version 1.0* @package entity ** @since 1.0*/ public class JwtUtil {//有效期為public static final Long JWT_TTL = 3600000L;// 60 * 60 *1000 一個小時//Jwt令牌信息public static final String JWT_KEY = "leon";/*** 生成令牌* @param id* @param subject* @param ttlMillis* @return*/public static String createJWT(String id, String subject, Long ttlMillis) {//指定算法SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;//當前系統時間long nowMillis = System.currentTimeMillis();//令牌簽發時間Date now = new Date(nowMillis);//如果令牌有效期為null,則默認設置有效期1小時if (ttlMillis == null) {ttlMillis = JwtUtil.JWT_TTL;}//令牌過期時間設置long expMillis = nowMillis + ttlMillis;Date expDate = new Date(expMillis);//生成秘鑰SecretKey secretKey = generalKey();//封裝Jwt令牌信息JwtBuilder builder = Jwts.builder().setId(id) //唯一的ID.setSubject(subject) // 主題 可以是JSON數據.setIssuer("admin") // 簽發者.setIssuedAt(now) // 簽發時間.signWith(signatureAlgorithm, secretKey) // 簽名算法以及密匙.setExpiration(expDate); // 設置過期時間return builder.compact();}/*** 生成加密 secretKey** @return*/public static SecretKey generalKey() {byte[] encodedKey = Base64.getEncoder().encode(JwtUtil.JWT_KEY.getBytes());SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}/*** 解析令牌數據** @param jwt* @return* @throws Exception*/public static Claims parseJWT(String jwt) throws Exception {SecretKey secretKey = generalKey();return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();}public static void main(String[] args) {String jwt = JwtUtil.createJWT("weiyibiaoshi", "aaaaaa", null);System.out.println(jwt);try {Claims claims = JwtUtil.parseJWT(jwt);System.out.println(claims);} catch (Exception e) {e.printStackTrace();}} }?
總結