栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JWT的学习使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 分享的视屏,在此感谢带我走上学习道路上的各位老师,以后我也会学习他们身上的优良品质,为其他人百忧解难,让这份心情传递下去。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号