封装hutool工具生成JWT token

    private static final String KEY = "abcdef";

    /**
     * 生成token
     *
     * @param payload 可以存放用户的一些信息,不要存放敏感字段
     * @return
     */
    public static String createToken(Map<String, Object> payload) {
    	//十分重要,不禁用发布到生产环境无法验证
        GlobalBouncyCastleProvider.setUseBouncyCastle(false);
        DateTime now = DateTime.now();
        DateTime expTime = now.offsetNew(DateField.HOUR, 24);
        // 签发时间
        payload.put(RegisteredPayload.ISSUED_AT, now);
        // 过期时间
        payload.put(RegisteredPayload.EXPIRES_AT, expTime);
        // 生效时间
        payload.put(RegisteredPayload.NOT_BEFORE, now);
        String token = JWTUtil.createToken(payload, KEY.getBytes());
        LOG.info("生成JWT token:{}", token);
        return token;
    }

    /**
     * 检验token是否有效
     *
     * @param token
     * @return
     */
    public static boolean validate(String token) {
        GlobalBouncyCastleProvider.setUseBouncyCastle(false);
        try {
            JWT jwt = JWTUtil.parseToken(token).setKey(KEY.getBytes());
            // validate包含了verify
            boolean validate = jwt.validate(0);
            LOG.info("JWT token校验结果:{}", validate);
            return validate;
        } catch (Exception e) {
            log.info("检验token异常{}", e.getMessage());
            return false;
        }
    }

    /**
     * 获取payload里的内容
     *
     * @param token
     * @return
     */
    public static JSONObject getJSONObject(String token) {
        GlobalBouncyCastleProvider.setUseBouncyCastle(false);
        if (!validate(token)) {
            return new JSONObject();
        }
        JWT jwt = JWTUtil.parseToken(token).setKey(KEY.getBytes());
        JSONObject payloads = jwt.getPayloads();
        payloads.remove(RegisteredPayload.ISSUED_AT);
        payloads.remove(RegisteredPayload.EXPIRES_AT);
        payloads.remove(RegisteredPayload.NOT_BEFORE);
        LOG.info("根据token获取原始内容:{}", payloads);
        return payloads;
    }

这一步非常重要,否则部署项目会发生JCE cannot authenticate the provider BC
BouncyCastle类是一个加密的第三方类,关闭它使用jdk自带的加密算法
GlobalBouncyCastleProvider.setUseBouncyCastle(false);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值