在项目中引入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到后端进行认证,如果认证通过,才会允许前端进行后续操作

相关推荐
一拳一个娘娘腔3 小时前
红队与蓝队视角:现代网络安全攻防中的Linux命令深度解析
linux·安全
书源丶4 小时前
三十五、Java 泛型——类型安全的「万能模板」
java·开发语言·安全
Chengbei117 小时前
AI大模型网关存在SQL注入、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·安全·web安全·网络安全·系统安全
一拳一个娘娘腔7 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
hwscom8 小时前
Linux服务器如何进行安全加固,防止黑客攻击(Windows也适用)
linux·服务器·安全
liann1198 小时前
3.4_Linux 应急响应排查速查命令表
linux·运维·服务器·安全·网络安全·系统安全
一拳一个娘娘腔9 小时前
攻防视角下的Windows凭证提取技术演进(2024-2026)
windows·安全
aaaffaewrerewrwer9 小时前
免费在线 AVIF 转 WebP 工具:浏览器端批量转换,无需上传更安全
安全·个人开发
@insist1239 小时前
信息安全工程师-入侵检测系统核心原理与体系架构
安全·架构·软考·信息安全工程师·软件水平考试