JWT Token的生成和解析工具類
阿新 • • 發佈:2018-11-15
轉載務必說明出處: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;
}
}