转载务必说明出处:https://blog.csdn.net/LiaoHongHB/article/details/84031016
关于JWT Token的生成和解析,自己写了一个工具类仅供大家参考。
首先在pom.xml中导入jwt的相关jar包:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
常量的定义:
public class CommonConstants {
public final static String CONTEXT_TOKEN = "Authorization";
public final static String CONTEXT_USERNAME = "contextUsername";
public final static String CONTEXT_USER_ID = "contextUserId";
public final static String JWT_PRIVATE_KEY = "0123456789";
public final static String RENEWAL_TIME = "renewalTime";
public final static String REDIS_USER_INFO_PREFIX = "userInfo_";
public final static String TOKEN = "token";
public final static String NO_LOGIN = "您目前还没有登陆";
public final static String TOKEN_CHECK_ERROR = "token校验出错";
public final static String TOKEN_EXPIRED = "登陆token已经失效";
public final static String USER_LOGIN_AGAIN = "用户已经重新登陆";
}
然后是实体类UserToken:
public class UserToken implements Serializable {
public UserToken() {}
public UserToken(String username, String userId) {
this.userId = userId;
this.username = username;
}
/**
* 用户id
*/
private String userId;
/**
* 用户登录名
*/
private String username;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "UserToken{" +
"userId=" + userId +
", username='" + username + '\'' +
'}';
}
}
最后是工具类:
public class JwtUtils {
public static String generateToken(UserToken userToken, int expire) throws Exception {
String token = Jwts.builder()
.setSubject(userToken.getUsername())
.claim(CommonConstants.CONTEXT_USER_ID, userToken.getUserId())
.claim(CommonConstants.RENEWAL_TIME,new Date(System.currentTimeMillis()+expire/2))
.setExpiration(new Date(System.currentTimeMillis()+expire))
.signWith(SignatureAlgorithm.HS256, CommonConstants.JWT_PRIVATE_KEY)
.compact();
return token;
}
public static UserToken getInfoFromToken(String token) throws Exception {
Claims claims = Jwts.parser()
.setSigningKey(CommonConstants.JWT_PRIVATE_KEY).parseClaimsJws(token)
.getBody();
UserToken userToken = new UserToken();
userToken.setUsername(claims.getSubject());
userToken.setUserId(claims.get(CommonConstants.CONTEXT_USER_ID).toString());
return userToken;
}
}