package com.*.util; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; import java.util.Map; /** * ConfigurationProperties注解:在 Spring Boot 項目中大量的參數配置,在 application.properties * 或 application.yml 文件中,通過 @ConfigurationProperties 注解,我們可以方便的獲取 * 這些參數值,application.yml 文件本身支持list類型所以在application.yml 文件中可以這樣配置: * jwt: * config: * key: 自定義私鑰key值 * timeOut: 有效時間(毫秒單位) */ @ConfigurationProperties("jwt.config") public class JwtUtil { //簽名私鑰 private String key; //簽名有效時間 private Long timeOut; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Long getTimeOut() { return timeOut; } public void setTimeOut(Long timeOut) { this.timeOut = timeOut; } /** * 設置認證token * id:用戶id * subject:用戶名 */ public String createJwt(String id, String name, Map<String,Object> map) { //1.設置失效時間 long nowTime = System.currentTimeMillis();//當前毫秒 long expirationTime = nowTime + timeOut; //2.創建jwtBuilder JwtBuilder jwtBuilder = Jwts.builder(); //3.根據map設置claims //當設置的是整個map時,就需放在最前面,下面的setId等參數才會有效,否則會把前面set的值置空 jwtBuilder.setClaims(map); jwtBuilder.setId(id); jwtBuilder.setSubject(name); jwtBuilder.setIssuedAt(new Date());//設置當前時間 jwtBuilder.signWith(SignatureAlgorithm.HS256, key);//設置加密方式 jwtBuilder.setExpiration(new Date(expirationTime));//設置過期時間 //4.創建token String token = jwtBuilder.compact(); return token; } /** * 解析token字符串獲取clamis */ public Claims parseJwt(String token) { Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody(); return claims; } }
