1. 程式人生 > >JWT Token的生成和解析工具類

JWT Token的生成和解析工具類

轉載務必說明出處: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;
    }
}