JWT

145 阅读1分钟

令牌

  • Header:加密类型,BASE64
  • Payload:有效信息,BASE64
  • Signature:数字签名,单向加密

依赖

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.18.2</version>
</dependency>

JWTUtil

@Component
@ConfigurationProperties(prefix = "jwt")
@EnableConfigurationProperties
public class JwtUtil {

    private String key;

    private Long expire;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public Long getExpire() {
        return expire;
    }

    public void setExpire(Long expire) {
        this.expire = expire;
    }

    /**
     * 验证token是否合法
     * @param token
     * @return
     */
    public boolean verifyToken(String token) {
        try {
            JWT.require(Algorithm.HMAC256(key)).build().verify(token);
            return true;
        } catch (JWTVerificationException e) {
            return false;
        }
    }

    /**
     * 生成token
     * @param data
     * @return
     */
    public String generateToken(String data) {
        return JWT.create()
                .withClaim("data", data)
                .withExpiresAt(new Date(System.currentTimeMillis() + expire * 1000))
                .sign(Algorithm.HMAC256(key));
    }

    /**
     * 解析token
     * @param token
     * @return
     */
    public String parseToken(String token) {
        return JWT.require(Algorithm.HMAC256(key))
                .build()
                .verify(token)
                .getClaim("data")
                .asString();
    }

    /**
     * 解析token且忽略过期时间
     * @param token
     * @return
     */
    public String parseTokenIgnoreExpire(String token) {
        return JWT.decode(token).getClaim("data").asString();
    }

    /**
     * 获取token的过期时间
     * @param token
     * @return
     */
    public Date getTokenExpireTime(String token) {
        return JWT.decode(token).getExpiresAt();
    }

}
jwt:
  key: die
  expire: 20