JWT概述

JWT是什么?

jwt一般是用来进行授权认证。
每当用户登录的时候,其后续的每个请求都会携带jwt,然后系统在每次处理用户的请求之前,都会先进行jwt安全校验,通过之后再进行处理。

JWT的组成

jwt可以看成是一个长字符串,由三部分组成:header, payload,以及两者结合加密形成的signature,中间使用.进行拼接。

eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9
.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2NDQ1MDIxMTgsImp0aSI6IjBmZDVhOTUxLTlkMTgtNDZmYS1hM2MxLTNhYzFjNmNhNDczYyJ9
.wme3-LSkTZuWaQ2H1-0Wht0-S-pQIoaCBzX_YP-yiF8

相关方法

  • 使用jwt引用的依赖
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>
  • 生成jwt
JwtBuilder jwtBuilder = Jwts.builder();
String jwtToken = jwtBuilder
        //header
        .setHeaderParam("typ","jwt")
        .setHeaderParam("alg","HS256")
        //payload
        .claim("username","tom")
        .claim("role","admin")
        .setSubject("admin-test")
        	//设置过期时间
        .setExpiration(new Date(System.currentTimeMillis()+1000*60*60*24))
        .setId(UUID.randomUUID().toString())
        //signature
        //后面那个value可以自定义,是作为signature的一个key,解密的时候需要用这个作为key进行解密
        .signWith(SignatureAlgorithm.HS256,"amdin")
        //拼接
        .compact();
  • 解码jwt
String jwtToken = "eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2NDQ1MDIxMTgsImp0aSI6IjBmZDVhOTUxLTlkMTgtNDZmYS1hM2MxLTNhYzFjNmNhNDczYyJ9.wme3-LSkTZuWaQ2H1-0Wht0-S-pQIoaCBzX_YP-yiF8";
        JwtParser jwtParser = Jwts.parser();
        Jws<Claims> claimsJws = jwtParser.setSigningKey("admin").parseClaimsJws(jwtToken);
        Claims claims = claimsJws.getBody();

        System.out.println(claims.getId());
        System.out.println(claims.getExpiration());
        System.out.println(claims.getSubject());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NCU-wfb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值