Java使用JWT 介绍和工具类

JWT
一、简介
1、JWT
JWT为 Json Web Token,是一种令牌生成算法。使用JWT能够保证Token的安全性,且能够进行Token时效性的检验。

2、JWT结构
JWT共由三部分组成,分别是数据头(Header)、Payload(数据体)、验证签名(Verify Signature)组成。其中,Header中的内容为加密信息以及Token的类别,Payload为用户数据、Verify Signature为校验数据。
 

二、依赖

JWT需要两个依赖java-jwt、jjwt

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.8.2</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

三、Token的生成与解析工具类


import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author cainiao
 * @create 2022/12/26
 */
public class JwtUtils {
    /**
     * 过期时间一天,
     * 1000 * 24 * 60 * 60 一天
     * 1000 * 60 * 60 一小时
     * 120 * 60 * 1000 120分钟
     */
    private static final long EXPIRE_TIME = 120 * 60 * 1000;
    /**
     * token私钥
     */
    private static final String TOKEN_SECRET = "f26e587c28064d0e855e72c0a6a0e631";

    /**
     * 校验token是否正确
     *
     * @param token 密钥
     * @return 是否正确
     */
    public static boolean verify(String token) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(TOKEN_SECRET);
            JWTVerifier verifier = JWT.require(algorithm)
                    .build();
            DecodedJWT jwt = verifier.verify(token);
            return true;
        } catch (Exception exception) {
            return false;
        }
    }

    /**
     * 获得token中的信息无需secret解密也能获得
     *
     * @return token中包含的用户名
     */
    public static String getTokenStr(String token, String data) {
        try {
            DecodedJWT jwt = JWT.decode(token);
            return jwt.getClaim(data).asString();
        } catch (JWTDecodeException e) {
            return null;
        }
    }


    /**
     * 生成签名,120min后过期
     *
     * @return 加密的token
     */
    public static String sign(Map<String, String> map) {
        try {
//            过期时间
            Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);

            //新建一个JWT的Builder对象
            JWTCreator.Builder builder = JWT.create();
//            设置头部信息
            Map<String, Object> header = new HashMap<>(2);
            header.put("typ", "JWT");
            header.put("alg", "HS256");
            map.forEach(builder::withClaim);
            //设置过期时间和签名
            String sign = builder.withHeader(header).withExpiresAt(date).sign(Algorithm.HMAC256(TOKEN_SECRET));
            // 附带用户信息,生成签名
            return sign;
        } catch (UnsupportedEncodingException e) {
            return null;
        }
    }

        public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("z2b", "1243");
        map.put("x1b", "e342");
        map.put("c3b", "5544");

        String signs = sign(map);
        System.out.println(signs);
        boolean s = verify(signs);
        System.out.println(s);
        String str = getTokenStr(signs, "zb");
        System.out.println(str);

    }

点点关注

扫码查看

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值