使用Java生成JWT令牌的示例代码

 更新时间:2024年04月09日 17:29:54   作者:临界点oc  
json-web-token简称java web令牌,也称作JWT,是一种可以实现跨域身份验证身份的方案,jwt不加密传输数据,但能够通过数据前面验证数据的未被篡改,本文给大家介绍了如何使用Java生成JWT令牌,需要的朋友可以参考下

1. 在pom.xml中引入依赖

 <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
</dependency>

2. 使用Jwts的相关方法生成令牌

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
 
@SpringBootTest
class DemoApplicationTests {
 
    /**
     * 生成JWT令牌
     */
    @Test
    public void testGenJwt() {
        Map<String, Object> claims = new HashMap<>();
        claims.put("id", 1);
        claims.put("name", "tom");
 
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, "itheima")  // 签名算法
                .setClaims(claims)  // 自定义内容(载荷)
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))  // 设置令牌有效期为1小时
                .compact();
        System.out.println(jwt);
    }
 
}

3. 把生成的令牌复制到JWT官网,查看原始数据

4. 基于Java代码解析生成的令牌

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
 
 
@SpringBootTest
class DemoApplicationTests {
 
    /**
     * 生成JWT令牌
     */
    @Test
    public void testGenJwt() {
        Map<String, Object> claims = new HashMap<>();
        claims.put("id", 1);
        claims.put("name", "tom");
 
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, "itheima")  // 签名算法
                .setClaims(claims)  // 自定义内容(载荷)
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))  // 设置令牌有效期为1小时
                .compact();
        System.out.println(jwt);
    }
 
    /**
     * 解析令牌
     */
    @Test
    public void testParseJwt() {
        Claims claims = Jwts.parser()
                .setSigningKey("itheima")  // 指定签名密钥
                // 解析令牌
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTY3MDQ2NzIyNH0.jL02hIWc1fZBjzvFCTtW4ZlSJ424khsobogsq0X2KVc")
                .getBody();
        System.out.println(claims);
    }
 
}

注意事项:

①JWT校验时使用的签名密钥,必须和生成JWT令牌时使用的密钥是配套的。

②如果JWT令牌解析校验时报错,则说明JWT令牌被篡改或失效了,令牌非法。

到此这篇关于使用Java生成JWT令牌的示例代码的文章就介绍到这了,更多相关Java生成JWT令牌内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中基于Nacos实现Sentinel规则持久化详解

    Java中基于Nacos实现Sentinel规则持久化详解

    这篇文章主要介绍了Java中基于Nacos实现Sentinel规则持久化详解,Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在⽣产环境下不合适,我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据,需要的朋友可以参考下
    2023-09-09
  • IDEA插件(BindED)之查看class文件的十六进制

    IDEA插件(BindED)之查看class文件的十六进制

    这篇文章主要介绍了IDEA插件(BindED)之查看class文件的十六进制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring boot的上传图片功能实例详解

    Spring boot的上传图片功能实例详解

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了Spring boot 上传图片,需要的朋友可以参考下
    2018-03-03
  • SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文主要介绍了SpringSecurity页面授权与登录验证实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 用JAVA实现单链表,检测字符串是否是回文串

    用JAVA实现单链表,检测字符串是否是回文串

    这篇文章主要介绍了使用JAVA实现单链表,检测字符串是否是回文串,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-11-11
  • Java中Lambda表达式并行与组合行为

    Java中Lambda表达式并行与组合行为

    这篇文章主要介绍了Java中Lambda表达式并行与组合行为,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Spring Boot/Angular整合Keycloak实现单点登录功能

    Spring Boot/Angular整合Keycloak实现单点登录功能

    Keycloak新的发行版命名为Quarkus,专为GraalVM和OpenJDK HotSpot量身定制的一个Kurbernetes Native Java框架,计划2019年底正式发布。这篇文章主要介绍了Spring Boot/Angular整合Keycloak实现单点登录,需要的朋友可以参考下
    2019-10-10
  • Java模拟栈和队列数据结构的基本示例讲解

    Java模拟栈和队列数据结构的基本示例讲解

    这篇文章主要介绍了Java模拟栈和队列数据结构的基本示例,栈的后进先出和队列的先进先出是数据结构中最基础的知识,本文则又对Java实现栈和队列结构的方法进行了细分,需要的朋友可以参考下
    2016-04-04
  • MyBatis实现高级映射的示例代码

    MyBatis实现高级映射的示例代码

    高级映射主要还是映射,只是映射中的数据关系复杂了,其中就包括一对一、一对多、多对多的关系,本文主要介绍了MyBatis实现高级映射的示例代码,感兴趣的可以了解一下
    2024-06-06
  • Mybatis传入List实现批量更新的示例代码

    Mybatis传入List实现批量更新的示例代码

    这篇文章主要介绍了Mybatis传入List实现批量更新的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论