JWT-Token升级方案

1. 介绍

在这里插入图片描述
JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。

2. 官网地址

https://jwt.io/
JWT令牌的组成:
 一个JWT由三个部分组成:JWT头、有效载荷、签名哈希
 最后由这三者组合进行base64url编码得到JWT
典型的,一个JWT看起来如下图:该对象为一个很长的字符串,字符之间通过"."分隔符分为三个子串。

在这里插入图片描述
在这里插入图片描述

3. 特点

 JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
 JWT 不加密的情况下,不能将秘密数据写入 JWT。
 JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
 JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
 JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
 为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

4. 生成token的方案比较

在这里插入图片描述

5. pom.xml

<!-- 集成jwt,升级token解决方案 -->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>4.0.0</version>
        </dependency>

6. JwtHelper.java

package com.bank.admin.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * @version v1.0 创建时间:19:40
 * @author: 作者:陈子枢
 * @web CSDN:https://blog.csdn.net/nutony
 * @description 描述:auth0.jwt 工具类
 */
public class JwtHelper {
    //过期时间,通常30分钟~1小时
    private static long EXPIRE_DATE = 1*60*60*1000;
    private static String TOKEN_SECRET = "chenchen";    //秘钥

    //创建token,含有userId和userName信息
    public static String createToken(String userId, String userName){
        Date expiredTime = new Date(System.currentTimeMillis()+EXPIRE_DATE);
        Algorithm alg = Algorithm.HMAC256(TOKEN_SECRET);
        try{
            String token = JWT.create()
                .withClaim("userId", userId)
                .withClaim("userName", userName)
                .withExpiresAt(expiredTime)
                .sign(alg);
            return token;
        }catch (Exception e){
            return null;
        }
    }

    //获取token中隐藏的信息
    public static String get(String token, String who){
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim(who).asString();
    }

    //校验token是否过期
    public static boolean verify(String token){
        DecodedJWT jwt = JWT.decode(token);
        if( jwt.getExpiresAt().before(new Date())) {
            //System.out.println("token is expired");
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        String t = JwtHelper.createToken("1", "130");
        System.out.println(t);
        String k = JwtHelper.get(t, "userName");
        System.out.println(k);

        //刚生成立马测试,返回true
        //boolean b = JwtHelper.verify(t);

        //超过时间测试,返回false
        boolean b = JwtHelper.verify("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6IjEzMCIsImV4cCI6MTY5NDA4OTM4OCwidXNlcklkIjoiMSJ9.N30GNN2LuEPx6KgqStkvm2MXiC--Y3UAAyISG26NcjA");
        System.out.println(b);

    }
}

7. token

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值