当前位置: 首页 > news >正文

java Spring Boot整合jwt实现token生成并验证效果

先在 pom.xml 文件中注入依赖

<!-- 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><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.2</version><scope>runtime</scope>
</dependency>

在这里插入图片描述
然后 这里 我们加一个属性类 用于用户登录使用 这里 我就搞简单一点 直接 一个id 一个name了
这里需要注意的是 如果你想通过id生成token 那么 你的id必须是个字符串
在这里插入图片描述
然后 随便找个能扫描到的目录创建一个类 叫 JwtUtils.java
因为登录接口要用 JwtUtils 所以 最好建在登录接口的类的同目录下
参考代码如下

package com.example.webdom.controller;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class JwtUtils {private final String secret = "4wAJAxLrSdtgJC8G2jsC/IcJMPfAp+a3IHJBYZkufYCQdh2Afk1TeHRgSwX/fEXHBGaP8mftoUiSd22G93GJ5A==";private final long expiration = 86400000; // 过期时间设置为24小时public String generateToken(String userid) {Date now = new Date();Date expiryDate = new Date(now.getTime() + expiration);return Jwts.builder().setSubject(userid).setIssuedAt(now).setExpiration(expiryDate).signWith(SignatureAlgorithm.HS512, secret).compact();}public String getUsernameFromToken(String token) {Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();return claims.getSubject();}public boolean validateToken(String token) {try {Jwts.parser().setSigningKey(secret).parseClaimsJws(token);return true;} catch (Exception e) {return false;}}
}

这里这个 secret 是基于这个秘钥和用户id来创建token的 就是说 secret 这个密码一定要统一
这个后面大家可以自己去了解一下
然后 我们接口所在的类 要条件装配好我们用户的属性类 也就是 users
然后 以及jwtUtils的配置类

 @Autowiredprivate JwtUtils jwtUtils;@Autowiredprivate users users;

然后 我们登录接口编写代码如下

@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody users users) {// 在这里进行用户验证逻辑,验证成功后生成JWT并返回给客户端String token = jwtUtils.generateToken(users.getId());return ResponseEntity.ok(token);
}

这里 我是直接不管了 不管他传什么进来 只要是符合我users类格式的 我就算他登录通过 通过getid生成一个token 返回回去
在这里插入图片描述
这里 我们尝试调用接口 可以看到 一起正常
然后 这里我编写逻辑 尝试校验token
在这里插入图片描述
我们随便放点东西 尝试请求
在这里插入图片描述
然后 我们用刚登录来的token 就可以了
在这里插入图片描述

http://www.lryc.cn/news/184152.html

相关文章:

  • 基础-MVP图像处理-仿射变换
  • Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
  • 学习完C++ 并发编程后 手写线程池 最简单的线程池
  • 【Overload游戏引擎分析】编辑器对象鼠标拾取原理
  • 【Spring内容进阶 | 第三篇】AOP进阶内容
  • 华为云ModelArts:引领AI艺术创作的未来,让人人都可以成为“艺术家”!
  • Elasticsearch:如何从 Elasticsearch 集群中删除数据节点
  • 长假回归,回顾一下所有的电商API接口
  • 认识计算机主板
  • PHP乱七八糟面试题
  • pom管理规范
  • AI大模型的安全隐患问题与新兴Anthropic新势力涌动
  • slamplay:用C++实现的SLAM工具集
  • IPT2602协议-USB 快速充电端口控制器
  • Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)
  • Titus网关中的缓存一致性机制
  • flutter开发实战 - inappwebview设置cookie
  • 零基础如何自学网络安全,基于就业前景全方位讲解,包教包会
  • Java项目防止SQL注入的几种方案
  • Win11 安装安卓子系统方法教程
  • golang pg 数据库不存在 就创建 --chatPGT
  • VUE3照本宣科——eslint与prettier
  • 【谷粒学院】Maven加载问题
  • PostgreSQL数据库中实现字段递增
  • 深度学习——深度学习计算二
  • HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Badge
  • 在Flink中集成和使用Hudi
  • docker搭建Jenkins及基本使用
  • CSS初体验
  • python性能分析