您的位置:首页 > 健康 > 养生 > 平面设计公司起名_建设工程计价_b站推广网站2024mmm_买链接

平面设计公司起名_建设工程计价_b站推广网站2024mmm_买链接

2025/2/24 15:06:11 来源:https://blog.csdn.net/qq_45055856/article/details/145816120  浏览:    关键词:平面设计公司起名_建设工程计价_b站推广网站2024mmm_买链接
平面设计公司起名_建设工程计价_b站推广网站2024mmm_买链接

 一.JWT令牌的生成和校验

JWT令牌生成

想要生成JWT令牌,那么就要首先引入JWT令牌的相关依赖,

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-gson</artifactId><version>0.11.2</version>
</dependency>

 在引入了JWT令牌的依赖后,我们在测试文件中编写代码来生成JWT令牌。

package com.gjw;import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import jakarta.websocket.Decoder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import javax.crypto.SecretKey;
import java.util.*;//@SpringBootTest
class TliasWebManagementApplicationTests {@Testvoid contextLoads() {}@Testvoid textUuid() {for (int i = 0; i < 1000; i++) {String uuid = UUID.randomUUID().toString();System.out.println(uuid);}}/*** 生成JWT令牌* JWT第二部分负载 payload中存储的内容*/@Testpublic void testGenJwt() {Map<String, Object> claims = new HashMap<>();claims.put("name","Tom");claims.put("id",1);String jwt = Jwts.builder()     // 构建Jwt令牌.signWith(SignatureAlgorithm.HS256, "handsomegaojiaweilovesbeautifulmengxinruloveforever")  // 选择签名算法,设置签名密钥.setClaims(claims)      // 添加负载信息(自定义内容).setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))      //  设置JWT令牌的有效期.compact();     //  获取JWT令牌的数据载荷部分System.out.println(jwt);}
}

首先我们生成JWT令牌,调用工具类Jwts的builder()方法来生成令牌,通过链式编程,然后再调用signWith()方法来指定签名算法,我们指定签名算法为HS256,指定签名密钥为"handsomegaojiaweilovesbeautifulmengxinruloveforever"。然后通过setClaims来添加负载信息(自定义内容)。其中setClaims方法的参数是一个map类型的数据。我们定义为HashMap并设置键值对为("name","Tom")和("id",1)。然后我们通过setExpiration来指定JWT令牌的过期时间,设置为当前时间再加上1个小时(3600毫秒×1000=3600秒=1hour)。最终通过conpact()方法将JWT令牌转换为字符串。

我们将运行出来的结果进行打印:

eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVG9tIiwiaWQiOjEsImV4cCI6MTc0MDMyMjUwNn0.c51zapcmXAxW_Vc-V-jxu3EqTi0vjMXI7EUhJcmMqjY

 JWT令牌校验

我们对生成的JWT令牌进行校验,通过parserBuilder()方法来解析JWT令牌,然后调用setSigningKey()方法传入签名密钥,并且调用.build()方法来创建解析器,调用.parseClaimsJws()方法传入生成的JWT令牌,并调用getBody()方法获取有效载荷。将获取到的有效载荷打印出来。

    /*** 解析JWT令牌* JWT第二部分负载 payload中存储的内容*/@Testpublic void testParseJwt() {//解析jwt令牌,获取- Payload(有效载荷)Claims claims = Jwts.parserBuilder()    // 使用 parserBuilder() 解析JWT令牌.setSigningKey("handsomegaojiaweilovesbeautifulmengxinruloveforever")   // 设置签名密钥.build()    // 创建解析器// 解析JWT令牌.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiVG9tIiwiaWQiOjEsImV4cCI6MTczNDEwNjkzNX0.7D3qaFCrhZmH0QAyrchLyWn4OQvzA_vlnrBjyJEMDzI").getBody();     // 获取有效载荷System.out.println(claims);}

结果如下:

{name=Tom, id=1.0, exp=1.740322506E9}

可以发现其有效载荷部分和我们在构建JWT令牌中的有效载荷部分相同。

请注意,我们设置的JWT令牌的有效期是令牌生成后一个小时,如果没有加上一个小时而设置为new Date(System.currentTimeMillis(),那么令牌构建成功后即刻过期,并不会成功解析。会报错:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com