java使用jwt登录

129 阅读1分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

 1.maven引入包

        <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

2.编写jwt工具包

package com.pgmsg.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.List;

public class JwtTokenUtils {

    public static final String ISSUE = "pg_msg";

    /**
     * 私钥
     */
    public static final String SECRET_KEY = "SECRET KEY";

    /**
     * TOKEN的认证形式
     */
    public static final String TOKEN_TYPE = "JWT";

    /**
     * TOKEN 头部名
     */
    public static final String TOKEN_HEADER = "Authorization";

    /**
     * TOKEN 认证的前缀
     */
    public static final String TOKEN_PREFIX = "PREFIX";

    /**
     * TOKEN的超时时间
     */
    public static final long TOKEN_EXPIRE = 30 * 60L;

    /**
     * CLAIMS
     */
    public static final String AUTHRITY_CLAIMS = "au";

    /**
     * 创建token
     */
    public static String createJwtToken(Long uid) {
        final Date createDate = new Date();
        final Date expiredDate = new Date(createDate.getTime() + TOKEN_EXPIRE * 1000);

        String jwtToken = Jwts.builder()
                .setHeaderParam("type", TOKEN_TYPE)
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .setIssuer(ISSUE)
                .setIssuedAt(createDate)
                .setSubject(uid + "")
                .setExpiration(expiredDate)
                .compact();

        return TOKEN_PREFIX + jwtToken;
    }

    /**
     * 判断token是否过期
     */
    public static boolean isTokenExpired(String token) {
        Date expireDate = getTokenBody(token).getExpiration();

        return expireDate.before(new Date());
    }

    /**
     * 获取绑定的ID
     */
    public static String getSubject(String token) {
        return getTokenBody(token).getSubject();
    }

    /**
     * 验证token是否有效
     */
    public static boolean validateToken(String token, Long uid) {
        return Integer.parseInt(getSubject(token)) == uid && !isTokenExpired(token);
    }

    /**
     * 获取tokenBody
     */
    private static Claims getTokenBody(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
                .getBody();
    }


}

3.登录使用

        String token = JwtTokenUtils.createJwtToken((Long) admin1.getId());

返回结果

{
    "status": 200,
    "msg": "登录成功!",
    "data": "PREFIXeyJ0eXBlIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJwZ19tc2ciLCJpYXQiOjE2Mzg3NzY2ODIsInN1YiI6IjEiLCJleHAiOjE2Mzg3Nzg0ODJ9.jYXmfh2a8CpMRZ-E7hzjoVBWoa-cm0LrSSBoUCu-kik"
}

\