使用 hutool包的jwt

package com.yl.common;

import cn.hutool.core.date.DateField;

import cn.hutool.core.date.DateTime;

import cn.hutool.json.JSONObject;

import cn.hutool.jwt.JWT;

import cn.hutool.jwt.JWTPayload;

import cn.hutool.jwt.JWTUtil;

import cn.hutool.jwt.RegisteredPayload;

import com.yl.exceptions.BaseErrorCode;

import com.yl.exceptions.RRException;

import lombok.extern.slf4j.Slf4j;

import org.springframework.util.ObjectUtils;

import java.util.HashMap;

import java.util.Map;

/**

 * JWTUtil

 * static final String key = "1122334";

 * <p>

 * public static void main(String[] args) {

 * Map<String, String> data = new HashMap();

 * data.put("loginAccount", "wangwangdui");

 * data.put("roleIds", "1,2,3");

 * String token = JWTUtils.generateToken(key, data);

 * <p>

 * JSONObject jsonObject = JWTUtils.verifyToken(key, token);

 * System.out.println(jsonObject);

 * }

 *

 * @author wangxiaohu

 * @date 2022-12-08 13:52

 */

@Slf4j

public class JWTUtils {

    public static final String KEY = "自己的那个长长的串串";

    /**

     * 生成token

     *

     * @param data data

     * @return String

     */

    public static String generateToken(Map<String, String> data) {

        return generateToken(KEY, data);

    }

    /**

     * 生成token

     *

     * @param key  key

     * @param data data

     * @return String

     */

    public static String generateToken(String key, Map<String, String> data) {

        DateTime now = DateTime.now();

        DateTime newTime = now.offsetNew(DateField.MINUTE, 10752);

        Map<String, Object> payload = new HashMap<>();

        //签发时间

        payload.put(RegisteredPayload.ISSUED_AT, now);

        //过期时间

        payload.put(RegisteredPayload.EXPIRES_AT, newTime);

        //生效时间

        payload.put(RegisteredPayload.NOT_BEFORE, now);

        //荷载数据

        payload.putAll(data);

        String token = JWTUtil.createToken(payload, key.getBytes());

        log.info("生成token->" + token);

        return token;

    }

    /**

     * 验证token

     *

     * @param token token

     * @return JSONObject

     */

    public static JSONObject verifyToken(String token) {

        return verifyToken(KEY, token);

    }

    /**

     * 验证token

     *

     * @param key   key

     * @param token token

     * @return JSONObject

     */

    public static JSONObject verifyToken(String key, String token) {

        JWT jwt = JWTUtil.parseToken(token);

        boolean verifyKey = jwt.setKey(key.getBytes()).verify();

        log.info("验证key->key:" + verifyKey);

        boolean verifyTime = jwt.validate(0);

        log.info("验证verifyTime->verifyTime:" + verifyTime);

        if (!verifyKey || !verifyTime) {

            throw new RRException(BaseErrorCode.AUTH_TOKEN_VALIDATE_ERROR);

        }

        JWTPayload payload = jwt.getPayload();

        JSONObject claimsJson = payload.getClaimsJson();

        if (ObjectUtils.isEmpty(claimsJson.get("wd"))) {

            throw new RRException(BaseErrorCode.AUTH_TOKEN_VALIDATE_ERROR);

        }

        log.info(claimsJson.toString());

        return claimsJson;

    }

}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值