JWT 工具类的编写
2022/1/28 23:04:29
本文主要是介绍JWT 工具类的编写,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
导入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; } }
这篇关于JWT 工具类的编写的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南