-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
828927d
commit 21be9e3
Showing
6 changed files
with
177 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
package com.qzx.xdupartner.util; | ||
|
||
import io.jsonwebtoken.Claims; | ||
import io.jsonwebtoken.JwtBuilder; | ||
import io.jsonwebtoken.Jwts; | ||
import io.jsonwebtoken.SignatureAlgorithm; | ||
import lombok.Getter; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.stereotype.Component; | ||
|
||
import javax.crypto.SecretKey; | ||
import javax.crypto.spec.SecretKeySpec; | ||
import java.util.Base64; | ||
import java.util.Date; | ||
import java.util.UUID; | ||
|
||
/** | ||
* JWT工具类 | ||
*/ | ||
@Component | ||
public class JwtUtil { | ||
|
||
//有效期为 | ||
public static final Long JWT_TTL = 14 * 24 * 60 * 60 * 1000L;// 60 * 60 *1000 一个小时 | ||
//设置秘钥明文 | ||
@Getter | ||
public static String JWT_KEY = "qzxabc"; | ||
|
||
@Value("${jwt_key}") | ||
public void setJwtKey(String jwtKey) { | ||
JWT_KEY = jwtKey; | ||
} | ||
|
||
public static String getUUID() { | ||
String token = UUID.randomUUID().toString().replaceAll("-", ""); | ||
return token; | ||
} | ||
|
||
/** | ||
* 生成jtw | ||
* | ||
* @param subject token中要存放的数据(json格式) | ||
* @return | ||
*/ | ||
public static String createJWT(String subject) { | ||
JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 设置过期时间 | ||
return builder.compact(); | ||
} | ||
|
||
/** | ||
* 生成jtw | ||
* | ||
* @param subject token中要存放的数据(json格式) | ||
* @param ttlMillis token超时时间 | ||
* @return | ||
*/ | ||
public static String createJWT(String subject, Long ttlMillis) { | ||
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间 | ||
return builder.compact(); | ||
} | ||
|
||
private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) { | ||
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; | ||
SecretKey secretKey = generalKey(); | ||
long nowMillis = System.currentTimeMillis(); | ||
Date now = new Date(nowMillis); | ||
if (ttlMillis == null) { | ||
ttlMillis = JwtUtil.JWT_TTL; | ||
} | ||
long expMillis = nowMillis + ttlMillis; | ||
Date expDate = new Date(expMillis); | ||
return Jwts.builder() | ||
.setId(uuid) //唯一的ID | ||
.setSubject(subject) // 主题 可以是JSON数据 | ||
.setIssuer("qzx") // 签发者 | ||
.setIssuedAt(now) // 签发时间 | ||
.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥 | ||
.setExpiration(expDate); | ||
} | ||
|
||
/** | ||
* 创建token | ||
* | ||
* @param id | ||
* @param subject | ||
* @param ttlMillis | ||
* @return | ||
*/ | ||
public static String createJWT(String id, String subject, Long ttlMillis) { | ||
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 设置过期时间 | ||
return builder.compact(); | ||
} | ||
|
||
//for test | ||
public static void main(String[] args) throws Exception { | ||
String token = ""; | ||
Claims claims = parseJWT(token); | ||
System.out.println(claims); | ||
} | ||
|
||
/** | ||
* 生成加密后的秘钥 secretKey | ||
* | ||
* @return | ||
*/ | ||
public static SecretKey generalKey() { | ||
byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY); | ||
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(); | ||
} | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters