3.1 Spring Security 中使用 JWT
3.1.1 开发环境准备
创建项目
JWT 依赖
使用 auth0 实现的 jwt 类库,加入到 pom.xml 文件中
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.14.0</version>
</dependency>
JWT 工具类
package com.imcode.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Date;
/**
* JWT 工具类
*/
public class JWTUtil {
/**
* 生成token
*
* @param username 用户名
* @param secret 私钥
* @param expireTime 有效期
* @param issuedTime 签发时间
* @return
*/
public static String generatorToken(String username, String secret, Long expireTime, Date issuedTime) {
Date date = new Date(System.currentTimeMillis() + expireTime * 1000);
Algorithm algorithm = Algorithm.HMAC256(username + secret);
return JWT.create()
.withClaim("username", username)
.withExpiresAt(date)
.withIssuedAt(issuedTime)
.sign(algorithm);
}
/**
* 校验 token
*
* @param token
* @param secret
* @return
*/
public static boolean verifyToken(String token, String secret) {
Algorithm algorithm = Algorithm.HMAC256(getUsername(token) + secret);
JWTVerifier verifier = JWT.require(algorithm).build();
verifier.verify(token);
return true;
}
/**
* 从token中获取用户名
*
* @param token
* @return
*/
public static String getUsername(String token) {
DecodedJWT jwt = JWT.decode(token);
return jwt.getClaim("username").asString();
}
/**
* 从token中获取签发时间
* @param token
* @return
*/
public static Date getIssuedTime(String token) {
DecodedJWT jwt = JWT.decode(token);
return jwt.getIssuedAt();
}
}