123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package com.api.base.config.auth;
- import io.jsonwebtoken.Claims;
- import io.jsonwebtoken.Jwts;
- import io.jsonwebtoken.SignatureAlgorithm;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- import java.io.Serializable;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- @Component
- public class JwtTokenUtil implements Serializable {
- private static final String CLAIM_KEY_USERNAME = "sub";
- private static final String CLAIM_KEY_TYPE = "type";
- private static final String CLAIM_KEY_CREATED = "created";
- private static final long serialVersionUID = -8305152446124853696L;
- /**
- * 密钥
- */
- @Value("${jwt.secret}")
- private String secret;
- /**
- * //有效期
- */
- @Value("${jwt.expiration}")
- private Long expiration;
- @Value("${jwt.tokenHead}")
- private String tokenHead;
- /**
- * 从数据声明生成令牌
- *
- * @param claims 数据声明
- * @return 令牌
- */
- private String generateToken(Map<String, Object> claims) {
- Date expirationDate = new Date(System.currentTimeMillis() + expiration * 1000);
- return Jwts.builder().setClaims(claims).setExpiration(expirationDate).signWith(SignatureAlgorithm.HS512, secret).compact();
- }
- /**
- * 从令牌中获取数据声明
- *
- * @param token 令牌
- * @return 数据声明
- */
- private Claims getClaimsFromToken(String token) {
- return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
- }
- /**
- * 生成令牌
- *
- * @return 令牌
- */
- public String generateToken(String username) {
- Map<String, Object> claims = new HashMap<>();
- claims.put(CLAIM_KEY_USERNAME, username);
- claims.put(CLAIM_KEY_CREATED, new Date());
- return generateToken(claims);
- }
- /**
- * 从令牌中获取用户名
- *
- * @param token 令牌
- * @return 用户名
- */
- String getUsernameFromToken(String token) {
- Claims claims = getClaimsFromToken(token);
- return claims.getSubject();
- }
- /**
- * 从令牌中获取用户类型
- *
- * @param token 令牌
- * @return 用户名
- */
- public String getTypeFromToken(String token) {
- String type;
- try {
- Claims claims = getClaimsFromToken(token);
- type = (String) claims.get(CLAIM_KEY_TYPE);
- } catch (Exception e) {
- type = null;
- }
- return type;
- }
- /**
- * 判断令牌是否过期
- *
- * @param token 令牌
- * @return 是否过期
- */
- private Boolean isTokenExpired(String token) {
- Claims claims = getClaimsFromToken(token);
- Date expiration = claims.getExpiration();
- return expiration.before(new Date());
- }
- /**
- * 刷新令牌
- *
- * @param token 原令牌
- * @return 新令牌
- */
- public String refreshToken(String token) {
- Claims claims = getClaimsFromToken(token);
- claims.put(CLAIM_KEY_CREATED, new Date());
- return generateToken(claims);
- }
- /**
- * 验证令牌
- *
- * @param token 令牌
- * @return 是否有效
- */
- Boolean validateToken(String token, String userName) {
- String username = getUsernameFromToken(token);
- return (username.equals(userName) && !isTokenExpired(token));
- }
- }
|