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;
    }
}

猜你喜欢

转载自blog.csdn.net/LiaoHongHB/article/details/84031016