JWT简述

JWT

1. JWT的特点

  1. 简洁:数据量小,传输快
  2. 自包含:其负载中包含了所有用户需要的数据
  3. 跨语言,原则上任何web都支持
  4. 特别适用于分布式

2.JWT的组成

  1. 标头(Header)

  2. 有效载荷(Payload)

  3. 签名(Signature)

因此JWT的token经常像这样:Header.Payload.Signature

Header:

标头通常由**令牌类型加密算法**组成;

令牌类型为jwt;

加密算法如:HMAC256、RSA等。通过Base64编码组成Header的第一部分

{
    "alg":"HS256",
    "typ":"JWT"
}

Payload:

有效荷载,包含声明。声明通常是用户的一些信息或者其它数据。

但是不推荐在Payload中放敏感信息(如:密码)

同样使用base64编码

{
    "username":"张三",
    "age":80,
    "girlfriend":null
}

Signature:

前面使用base64编码,前端可以直接解码获取里面的信息。

Signature使用编码后的Header和Payload,加上一个我们提供的密钥,然后使用Header中的加密算法进行加密。

signature能验证token是否被篡改过

一个简单的工具类:

public class JWTUtil {
    private static final String SIGN = "r5yj`;hfd45lkjhg666";

    //生成token   header(可用默认值,不用设置)、payload、令牌
    public static String getToken(Map<String, String> map) {
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DATE, 7);  //设置token 7天过期

        //创建jwt bulider
        JWTCreator.Builder bulider = JWT.create();
        //payload设置
        map.forEach((k, v) -> {
            bulider.withClaim(k, v);
        });
        String token = bulider.withExpiresAt(instance.getTime()).sign(Algorithm.HMAC256(SIGN));

        return token;
    }

    /*
     *  验证token是否合法
     */
    public static void verify(String token) {
        JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
    }


    /*
     *  获取token信息
     */
    public static DecodedJWT getTokenInfo(String token) {
        DecodedJWT result = JWT.require(Algorithm.HMAC256(SIGN)).build().verify(token);
        return result;
    }
}

最后附上官网地址:JWT官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了我的架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值