【JwtUtil】JwtUtil工具类与测试情况
(1) jwt整合
<!-- jwt整合 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
(2) JwtUtil工具类代码
/**
* @author 東方神劍
* 時間 2023/05/30下午 07:13
*/
@Component
public class JwtUtil {
// 有效期
private static final long JWT_EXPIRE = 30*60*1000L; //半小时
// 令牌MIYAO
private static final String JWT_KEY = "123456";
public String createToken(Object data){
// 当前时间
long currentTime = System.currentTimeMillis();
// 过期时间
long expTime = currentTime+JWT_EXPIRE;
// 构建jwt
JwtBuilder builder = Jwts.builder()
.setId(UUID.randomUUID()+"")
.setSubject(JSON.toJSONString(data))
.setIssuer("system")
.setIssuedAt(new Date(currentTime))
.signWith(SignatureAlgorithm.HS256, encodeSecret(JWT_KEY))
.setExpiration(new Date(expTime));
return builder.compact();
}
private SecretKey encodeSecret(String key){
byte[] encode = Base64.getEncoder().encode(key.getBytes());
SecretKeySpec aes = new SecretKeySpec(encode, 0, encode.length, "AES");
return aes;
}
public Claims parseToken(String token){
Claims body = Jwts.parser()
.setSigningKey(encodeSecret(JWT_KEY))
.parseClaimsJws(token)
.getBody();
return body;
}
public <T> T parseToken(String token,Class<T> clazz){
Claims body = Jwts.parser()
.setSigningKey(encodeSecret(JWT_KEY))
.parseClaimsJws(token)
.getBody();
return JSON.parseObject(body.getSubject(),clazz);
}
}
(3) JwtUtil测试类代码
/**
* @author 東方神劍
* 時間 2023/05/30下午 08:54
*/
@SpringBootTest
public class JwtUtilTest {
@Autowired
private JwtUtil jwtUtil;
@Test
public void testCreateJwt(){
User user = new User();
user.setUsername("张三");
user.setPhone("1234567890");
String token = jwtUtil.createToken(user);
System.out.println(token);
}
@Test
public void testParseJwt(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNjJlNWNiYS1lNTZkLTRiMTItYThiNC03ZGNlMzZjNDZmMjYiLCJzdWIiOiJ7XCJwaG9uZVwiOlwiMTIzNDU2Nzg5MFwiLFwidXNlcm5hbWVcIjpcIuW8oOS4iVwifSIsImlzcyI6InN5c3RlbSIsImlhdCI6MTY4NTQ1NTE0NywiZXhwIjoxNjg1NDU2OTQ3fQ.VYt4b89O1iFwwXUqwgZ-Uh7s162pmvPAu9t6jCywQi4";
Claims claims = jwtUtil.parseToken(token);
System.out.println(claims);
}
@Test
public void testParseJwt2(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNjJlNWNiYS1lNTZkLTRiMTItYThiNC03ZGNlMzZjNDZmMjYiLCJzdWIiOiJ7XCJwaG9uZVwiOlwiMTIzNDU2Nzg5MFwiLFwidXNlcm5hbWVcIjpcIuW8oOS4iVwifSIsImlzcyI6InN5c3RlbSIsImlhdCI6MTY4NTQ1NTE0NywiZXhwIjoxNjg1NDU2OTQ3fQ.VYt4b89O1iFwwXUqwgZ-Uh7s162pmvPAu9t6jCywQi4";
User user = jwtUtil.parseToken(token,User.class);
System.out.println(user);
}
}
(4)一点儿补充(优秀代码设计片段标记与摘录):
在JwtUtil工具类里这个方法是很不错的: