JWT基本使用

JWT => json web token的简称

简介

  • 数字签名方式,以JSON对象为载体,在不同服务终端之间安全的传输信息。
  • 常用用于授权验证,后续每个请求都会包含JWT,系统每次处理用户请求之前,都会进行JWT安全校验,通过后再进行处理
  • JWT使用 . 来进行分隔

三个组成部分

header

{
  'typ': 'JWT',
  'alg': 'HS256'
}
  • typ -> token类型
  • alg -> 算法类型

Payload

{
  "user": "ask",
  "admin": true
}
  • 存储数据

Signature

把加密之后的header 和 加密之后的payload 进行再次加密

Example

依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>

生成JWT

 @Test
    public void jwt() {
        JwtBuilder jwtBuilder = Jwts.builder();

        String jwtToken = jwtBuilder
//                header
                .setHeaderParam("typ", "JWT")
                .setHeaderParam("alg", "HS256")
//                payload
                .claim("username", "ask")
                .claim("role", "admin")
                .setSubject("eva02")
                .setExpiration(new Date(System.currentTimeMillis() + time))
                .setId(UUID.randomUUID().toString())
//              signature
                .signWith(SignatureAlgorithm.HS256, signature)
                .compact();

        System.out.println(jwtToken);

    }

分析

  • setHeaderParam -> 设置 Header头信息
  • claim -> 携带的数据
  • setSubject -> 设置主机
  • setExpiration -> 保存时间
  • setId -> 设置ID
  • signWith -> 声明算法和签名
  • compact -> 拼接
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFzayIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImV2YTAyIiwiZXhwIjoxNjUxNzMxOTgzLCJqdGkiOiJlYTQwYTFkMC00YjhlLTQ0YjYtYmYxZC1hZDYxYzRlMTMxM2MifQ.NnpyfCMfqRdpR5VW0BXIC9-K_I31ll1c9W1NU2wMB-U

解析

@Test
public void parse(){
    String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFzayIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImV2YTAyIiwiZXhwIjoxNjUxNzMxOTgzLCJqdGkiOiJlYTQwYTFkMC00YjhlLTQ0YjYtYmYxZC1hZDYxYzRlMTMxM2MifQ.NnpyfCMfqRdpR5VW0BXIC9-K_I31ll1c9W1NU2wMB-U";
    JwtParser jwtParser = Jwts.parser();

    Jws<Claims> claimsJws = jwtParser
            .setSigningKey(signature)
            .parseClaimsJws(token);

    Claims claims = claimsJws.getBody();

    System.out.println(claims.get("username"));
    System.out.println(claims.getSubject());
}
  • JwtParser jwtParser = Jwts.parser(); -> 声明解析
  • setSigningKey -> 带入签名
  • parseClaimsJws -> token信息
  • getBody -> 获取解析数据
  • get… -> 获取相关数据

参考

点击查看【bilibili】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xingpeng-zhuang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值