在项目中引入JWT令牌

一.什么是JWT?

JWT:全称JSON Web Token(JSON网络令牌)。通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。

二.JWT有什么作用?

JWT最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都要先进行JWT安全校验,通过之后再进行处理。

比喻:把系统比喻一家公司,我登录系统以后,就会给我发一个出入证,在进入公司的每个部门、每个房间之前,都要初始这个出入证,才能进入公司。这样使得公司安全性就比较高。

三.JWT的组成

JWT由3部分组成,之间用.拼接

如下图所示:

1.Header

我们将上面的JSON对象,通过Base64加密后,就成了1中的红线字符串。

2.Payload(载荷,存放有效信息的地方)

我们将上面的JSON对象,通过Base64加密后,就成了1中的黄线字符串。

3.Signature(签名,就是对前两部分再次加密)

先将前两部分的结果,用.拼接

然后将拼接结果再次加密,得到1中的绿线字符串

四.JWT的基本使用

1.引入依赖

jdk1.8只用加下面这一个依赖

XML 复制代码
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

jdk1.8以后的依赖,还需加下面几个依赖

XML 复制代码
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

2.编写测试方法

java 复制代码
public class Test01 {

    //设置有效时间为1天
    private long time = 1000*60*60*24;
    //设置签名信息
    private String signature = "admin";

    //创建JWT(Json Web Token)
    @Test
    public void jwt(){
        //1.创建jwtBuilder,用于后续构建JWT(JSON WEB TOKEN)
        JwtBuilder jwtBuilder = Jwts.builder();
        //2.构建JWT
        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()+time))
                .setId(UUID.randomUUID().toString())
                //signature
                .signWith(SignatureAlgorithm.HS256, signature)
                //将三者拼接成字符串即可
                .compact();
        //输出生成的JWT
        System.out.println(jwtToken);
    }
    
    //解析jwt
    @Test
    public void parse(){
        String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE3NDc4NzYxNjUsImp0aSI6IjI0M2I3YmViLWZiNjAtNDJiZS1iYTgzLWRmNjJhMWQ2Y2FiZCJ9.-DLbbhSfedUp8_dIbAXvqGi_ItBSYnfO5jQgS_WDbhs";
        JwtParser jwtParser = Jwts.parser();
        //通过我们的自定义签名,对生成的token进行解析
        Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        //获取jwt中的信息
        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());
        
    }
}

3.运行结果

上图jwt()测试方法运行结果如下:这就是由三部分组成的JWT令牌(出入证)。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsInN1YiI6ImFkbWluLXRlc3QiLCJleHAiOjE3NDc4NzY3MTgsImp0aSI6IjQ4MjY1ODVkLTMwYTMtNDBjYS1iYjNkLTExZWU3NTU1ZjkyNyJ9.4LhB5EPjEbR8pJ1j1t2bFFHbHWBk_SNatkr9oiWICtM

上图parse()测试方法运行结果如下:这就是解析上面的jwt后,得到的信息。

tom

admin

4826585d-30a3-40ca-bb3d-11ee7555f927

admin-test

Thu May 22 09:18:38 CST 2025

五.项目中JWT的使用

1.大致流程(两个功能)

①第一次登陆时,如果登陆成功,后端就返回token给前端保存起来

②前端后续的每次请求,都会携带token到后端进行认证,如果认证通过,才会允许前端进行后续操作

相关推荐
xixingzhe21 小时前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
中科岩创2 小时前
宁波某大学高支模施工安全监测实训模型应用
科技·物联网·安全·自动化
项目经理老王3 小时前
OpenClaw无捆绑安装包,安全纯净版AI助手部署
人工智能·安全
小李@Free2FA9 小时前
跨境卖家多平台二次验证统一管理
安全·外贸·2fa·二次验证
云祺vinchin10 小时前
混合云异构环境下的灾备实战:VMware+Hyper-V统一保护方案解析
安全·容灾备份·容灾备份体系
MartinYeung511 小时前
从注入攻击到诈骗:@martin_yeung/llm-up-guardrail 提供生产级 AI 安全防护
人工智能·安全
anbingsoft1212 小时前
企业加密软件软件有哪些?企业加密软件:让设计图纸安全无忧,年度热销
网络·安全·电脑
一楼的猫13 小时前
AI写作检测机制技术深度解析:200+维度检测、叙事指纹与网文AI辅助怎么过审
人工智能·学习·安全·chatgpt·ai写作
技术不好的崎鸣同学14 小时前
[极客大挑战 2019]EasySQL 思路及解法
网络·安全·web安全
Kyrie67814 小时前
Januscape:潜伏 16 年的 KVM 虚拟机逃逸漏洞
安全·kvm