导入JWT pom依赖
<!--JWT 依赖--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency> ----------------------------------------------------------------------------
package com.woniuxy.config; import io.jsonwebtoken.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Description:JwtToken工具类 * * @author: ykq11 <br/> * Date: 2022/1/28:21:59 <br/> */ @Component public class JwtTokenUtil { private static final String CLAIM_KEY_USERNAME="sub"; private static final String CLAIM_KEY_CREATED = "created"; @Value("${jwt.secret}") private String secret; @Value("$jwt.expiration") private Long expiration; /** * Description : 根据用户信息生成token <br/> * ChangeLog : 1. 创建 (2022/1/28 22:08 [ykq11]); ** @param userDetails * * @return java.lang.String */ public String generateToken(UserDetails userDetails){ Map<String, Object> claims = new HashMap<>(); claims.put(CLAIM_KEY_USERNAME,userDetails.getUsername()); claims.put(CLAIM_KEY_CREATED, new Date()); return generateToken(claims); } /** * Description : TODO 根据荷载生成JWT Token <br/> * ChangeLog : 1. 创建 (2022/1/28 22:11 [ykq11]); ** @param claims * * @return java.lang.String */ private String generateToken(Map<String, Object> claims) { return Jwts.builder(). setClaims(claims). setExpiration(generateExpiration()). compact(); } /** * Description : TODO 生成token失效时间 <br/> * ChangeLog : 1. 创建 (2022/1/28 22:12 [ykq11]); * * * * @return java.util.Date */ private Date generateExpiration() { return new Date(System.currentTimeMillis() + expiration * 1000); } /** * Description : TODO 从token中获取用户名 <br/> * ChangeLog : 1. 创建 (2022/1/28 22:17 [ykq11]); ** @param token * * @return username */ public String getUsernameFromToken(String token){ String username; try { Claims clams=getClaimFromToken(token); username=clams.getSubject(); } catch (Exception e) { username = null; } return username; } /** * Description : TODO 验证token是否有效<br/> * ChangeLog : 1. 创建 (2022/1/28 22:28 [ykq11]); ** @param userDetails,token * * @return null */ public boolean validateToken(String token, UserDetails userDetails) { String username = getUsernameFromToken(token); return username.equals(userDetails.getUsername())&& !isTokenExpired(token); } /** * Description : TODO 判断token是否可以被刷新<br/> * ChangeLog : 1. 创建 (2022/1/28 22:34 [ykq11]); ** @param token * * @return null */ public boolean canRefresh(String token){ return !isTokenExpired(token); } /** * Description : TODO 刷新token<br/> * ChangeLog : 1. 创建 (2022/1/28 22:36 [ykq11]); ** @param token * * @return null */ public String refreshToken(String token) { Claims claims = getClaimFromToken(token); claims.put(CLAIM_KEY_CREATED,new Date()); return generateToken(claims); } /** * Description : TODO 判断token是否失效<br/> * ChangeLog : 1. 创建 (2022/1/28 22:29 [ykq11]); ** @param token * * @return null */ private boolean isTokenExpired(String token) { Date expiredDate = getExpirationDateFromToken(token); return expiredDate.before(new Date()); } /** * Description : TODO 获取token中的失效时间 <br/> * ChangeLog : 1. 创建 (2022/1/28 22:32 [ykq11]); ** @param token * * @return null */ private Date getExpirationDateFromToken(String token) { Claims claims=getClaimFromToken(token); return claims.getExpiration(); } /** * Description : TODO 从token获取荷载<br/> * ChangeLog : 1. 创建 (2022/1/28 22:21 [ykq11]); ** @param token * * @return Claims */ private Claims getClaimFromToken(String token) { Claims claims=null; try { claims= Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); } catch (Exception e) { e.printStackTrace(); } return claims; } }