本文主要是介绍jjwt使用制作token,解析token异常提醒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
<!-- jwt -->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version>
</dependency>
<jjwt.version>0.9.1</jjwt.version>
yml配置文件
# JWT配置
jwt:# 密匙Keytoken-secret: WangKun# HeaderKeytoken-header-key: Authorization# Token前缀token-prefix: WangKun# 过期时间,单位秒token-expiration: 864000
获取token信息
/*** @Description JWT令牌信息* @Author WangKun* @Date 2024/1/30 18:24* @Version*/
@Data
@Component
public class JwtInfoConfig {/*** token响应头Key*/public static String tokenHeaderKey;/*** token前缀*/public static String tokenPrefix;/*** token秘钥*/public static String tokenSecret;/*** token过期时间*/public static Long tokenExpiration;@Value("${jwt.token-header-key}")public void setTokenHeaderKey(String tokenHeaderKey) {JwtInfoConfig.tokenHeaderKey = tokenHeaderKey;}@Value("${jwt.token-prefix}")public void setTokenPrefix(String tokenPrefix) {JwtInfoConfig.tokenPrefix = tokenPrefix;}@Value("${jwt.token-secret}")public void setTokenSecret(String tokenSecret) {JwtInfoConfig.tokenSecret = tokenSecret;}@Value("${jwt.token-expiration}")public void setTokenExpiration(Long tokenExpiration) {JwtInfoConfig.tokenExpiration = tokenExpiration;}
}
制作token
/*** @Description Token令牌工具* @Author WangKun* @Date 2024/2/1 15:33* @Version*/
@Slf4j
public class TokenUtil {/*** @param username 用户名* @param claimKey 有效负荷key(不加密,不要放隐私内容)* @param claimValue 有效负荷value* @Description 生成令牌* @Throws* @Return java.lang.String* @Date 2024-02-01 16:10:49* @Author WangKun*/public static String creatToken(String username, String claimKey, Object claimValue) {//有效负荷Claims claim = Jwts.claims();claim.put(claimKey, claimValue);//设置token响应头return Jwts.builder()//设置有效负荷.setClaims(claim)//设置用户名.setSubject(username)//设置token过期时间.setExpiration(new Date(System.currentTimeMillis() + JwtInfoConfig.tokenExpiration))//设置token签名算法及秘钥.signWith(SignatureAlgorithm.HS512, JwtInfoConfig.tokenSecret).compact();}/*** @param username* @Description 生成令牌,无有效负荷* @Throws* @Return java.lang.String* @Date 2024-02-01 18:21:53* @Author WangKun*/public static String creatToken(String username) {//设置token响应头return Jwts.builder()//设置用户名.setSubject(username)//设置token过期时间.setExpiration(new Date(System.currentTimeMillis() + JwtInfoConfig.tokenExpiration))//设置token签名算法及秘钥.signWith(SignatureAlgorithm.HS512, JwtInfoConfig.tokenSecret).compact();}/*** @param token* @Description 解析令牌* @Throws* @Return com.alibaba.fastjson2.JSONObject* @Date 2024-02-01 17:47:15* @Author WangKun*/public static JSONObject analyzeToken(String token) {Claims claims;try {// 解析tokenclaims = Jwts.parser().setSigningKey(JwtInfoConfig.tokenSecret).parseClaimsJws(token.replace(JwtInfoConfig.tokenPrefix + ".", "")).getBody();return new JSONObject(new HashMap<>(claims));} catch (ExpiredJwtException e) {log.error("令牌过期:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_EXPIRED));} catch (UnsupportedJwtException e) {log.error("无效的令牌:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_INVALID));} catch (MalformedJwtException e) {log.error("令牌格式错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_FORMAT_ERROR));} catch (SignatureException e) {log.error("令牌签名错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_SIGNATURE_ERROR));} catch (IllegalArgumentException e) {log.error("非法令牌:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_ILLEGALITY));} catch (Exception e) {log.error("令牌解析错误:{},{}", e, e.getMessage());throw new RuntimeException(String.valueOf(ResultCode.TOKEN_ANALYZE_ERROR));}}
这篇关于jjwt使用制作token,解析token异常提醒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!