JWT的学习使用

JWT的学习使用,第1张

JWT的学习使用 一、理论

1.什么是JWT?

JSON Web Token,通过数字签名的方式,以JSON为载体,在不同终端安全传输信息。

2.有什么用?

授权认证,用户一旦登录,后续每个请求都包含JWT,系统每次处理用户请求之前,都要进行JWT的安全校验,通过之后再进行处理。(可理解为发放的出入证件,可以用来保护后后台接口。)

3.JWT的组成

三个部分,由"."连接。

aaaaaa.bbbbbb.cccccc

第一部分(aaaaaa):Header,还要经过base64,才能构成第一部分。

 {

        'typ':'JWT',        //token的类型

        'alg':'HS256',        //算法

}

第二部分(bbbbbb): Payload(载荷) 还要经过base64,才能构成第二部分。

        Payload分为三个部分,分别是:标准中注册的声明、公共的声明、私有的声明。

{

        "sub":'1234567890',

        "name":'john',

        "admin":true

}

第三部分(cccccc): Signature(签名)

        将编码之后的header和payload加.拼接后,通过header中声明的加密方式加密,构成第三部分。

var encodedString = base64UrlEncode(header)+'.'+base64UrlEncode(payload);

var signature = HMACSHA256(encodingString,'secret');

二、使用 

1.pom.xml中导入依赖


    io.jsonwebtoken
    jjwt
    0.9.1

2、JWT编码

 

package com.zy.utils;

import io.jsonwebtoken.*;
import org.junit.Test;

import javax.security.auth.Subject;
import java.util.Date;
import java.util.UUID;

public class JWT {
    private long time =1000*60*24;
    private String signature = "admin";

    @Test
    public void jwt(){
        JwtBuilder jwtBuilder = Jwts.builder();//builder是用来构建jwt的对象
        String jwToken = jwtBuilder
                //Header的设置
                .setHeaderParam("typ","Jwt")
                .setHeaderParam("alg","HS256")
                //PayLoad的设置
                .claim("username","tom")
                .claim("role","admin")
                .setSubject("admin-test")
                .setExpiration(new Date(System.currentTimeMillis()+time))//有效期oneday
                .setId(UUID.randomUUID().toString())
                //Signture的设置
                .signWith(SignatureAlgorithm.HS256,signature)
                .compact();
        System.out.println(jwToken);
    }

    @Test
    public void parser(){
    //这里的token是运行jwt()之后产生的token。
        String token = "eyJ0eXAiOiJKd3QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE2NDI4MzcwNTIsImp0aSI6IjE0Zjk2ZDA0LWZiYjItNDMyMy1iMDYzLTI1MTViMzA1OWMzNCJ9.CpwjEGWe0iMJIf6V82r195fh3BZgthMmIlLzZb9Qf1U";
        JwtParser jwtParser =Jwts.parser();
        Jws claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);//通过这个签名signature对token进行解析。
        Claims claims = claimsJws.getBody();
        System.out.println(claims.get("username"));
        System.out.println(claims.get("role"));
        System.out.println(claims.getId());
        System.out.println(claims.getSubject());
        System.out.println(claims.getExpiration());

    }
}

        运行完jwt()的结果:

         运行完parser()之后的结果:

 在此感谢 楠哥教你学Java 分享的视屏,在此感谢带我走上学习道路上的各位老师,以后我也会学习他们身上的优良品质,为其他人百忧解难,让这份心情传递下去。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存