java Spring Boot整合jwt实现token生成

news2024/12/26 14:34:45

先在 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的配置类

 @Autowired
 private JwtUtils jwtUtils;
 @Autowired
 private 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 就可以了
在这里插入图片描述
但这里 一定要注意的是 validateToken 只是判断token的格式是否符合规范
至于过期 又或者 退出登录等等 需要我们自己去编写更完整的逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1066624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决方案:AI赋能工业生产3.0,从工业“制造”到“智造”

视频监控技术是一种既成熟又广泛应用于工业制造领域的先进技术。它可以通过安装各种摄像头和传感器来监测整个生产流程&#xff0c;包括原材料的采购、加工、装配和物流等环节&#xff0c;从而实现对生产过程的实时监控和管理&#xff0c;以及对异常事件的及时预警和响应。 在…

CSS高手必会秘籍《混合模式》

&#x1fab4; 背景 前几天我写了两篇关于css的文章&#xff0c;热度都还不错。 # 原创动画《优弧&#xff0c;你小子&#xff01;&#x1f621;》 # &#x1f973;&#x1f973;&#x1f973; 倾情奉献&#xff0c;纯css&#xff08;无图&#xff0c;无JS&#xff09;原创中…

6.canvas绘制基本图形——椭圆

ellipse ellipse是一个用来绘制椭圆的api&#xff0c;它拥有8个参数 参数一&#xff1a;椭圆圆心的 x 轴坐标。 参数二&#xff1a;椭圆圆心的 y 轴坐标。 参数三&#xff1a;椭圆长轴的半径。 参数四&#xff1a;椭圆短轴的半径。 参数五&#xff1a;椭圆的顺时针旋转角度&am…

6.绘制三角形

愿你出走半生,归来仍是少年 上一个案例通过Buffer实现了点集合的传入并一次性绘制多个点。当前案例通过Buffer传入多个点&#xff0c;并一次性通过点绘制出一个三角形。 1.知识点 1.1.gl_PointSize 只有在绘制点时才有效&#xff0c;该案例中的顶点着色器中已移除此代码。 1…

学生必备的笔记工具比较适合用哪个

学习与笔记紧密相连&#xff0c;它们是知识获取和积累的有效途径。通过记录笔记&#xff0c;我们不仅可以更好地理解和记忆学习内容&#xff0c;还可以随时翻阅&#xff0c;巩固知识点。然而&#xff0c;传统的纸质笔记在面对大量学习内容时显得力不从心&#xff0c;而电子笔记…

查找文件夹下不同的图片名字

描述&#xff1a;文件夹1和文件夹2下有3张图片&#xff0c;其中文件夹1下有柯南.jpg、柯南1.jpg、柯南2.jpg&#xff0c;文件夹2下有柯南.jpg、柯南3.jpg、柯南4.jpg&#xff0c;找出文件夹1中不同于文件夹2的名字&#xff0c;以及文件夹2中不同于文件夹1的名字。文件解构如下图…

uni-app:引入echarts(使用renderjs)

效果 代码 <template><view click"echarts.onClick" :prop"option" :change:prop"echarts.updateEcharts" id"echarts" class"echarts"></view> </template><script>export default {data()…

【源码】hamcrest 源码阅读 空对象模式、模板方法模式的应用

文章目录 前言1. 类图概览2. 源码阅读2.1 抽象类 BaseMatcher2.1 接口 Description提炼模式&#xff1a;空对象模式 2. 接口 Description 与 SelfDescribing 配合使用提炼模式 模板方法 后记 前言 hamcrest &#xff0c;一个被多个测试框架依赖的包。听说 hamcrest 的源码质量…

【芯片设计- RTL 数字逻辑设计入门 4 - 第一个 RTL Bug 分析之路 】

文章目录 1.1 Veloce 验证1.1.1 问题背景1.1.2 问题分析1.1.3 调试小技巧 1.1 Veloce 验证 本文是基于veloce验证平台进行的&#xff0c;关于veloce的介绍如下&#xff1a; 传统的验证技术中,主要采用两种手段。 一种是基于EDA工具(Simulator)的仿真验证。这种验证方式是基于…

谈谈你对 finalize 方法的理解,该怎样回答才能体现出高水平?浮于表面的答案永远不行!

目录 1. finalize 方法是什么&#xff1f; 2. finalize 方法的作用&#xff1f; 3. 为什么强烈不建议在 finalize 方法中进行资源的释放和清理工作 1. finalize 方法是什么&#xff1f; 首先要知道&#xff0c;finalize 方法是 Object 类中的一个方法&#xff0c;从源码中叶…

ES6 class类的静态方法static有什么用

在项目中&#xff0c;工具类的封装经常使用静态方法。 // amap.jsimport AMapLoader from amap/amap-jsapi-loader; import { promiseLock } from triascloud/utils; /*** 高德地图初始化工具*/ class AMapHelper {static getAMap window.AMap? window.AMap: promiseLock(AM…

[PyTorch][chapter 56][GAN 代码实现]

前言&#xff1a; 整个工程分为两个文件: gan.py: 网络模型搭建 main.py: 数据集生成&#xff0c;模型训练 目录&#xff1a; GAN 网络结构 gan.py main.py 一 GAN 网络结构 1.1 训练D 最大化V 1.2 训练G 固定G, 最小化 二 gan.py 功能&#xff1a; 实现 鉴别器D …

vue3+elementPlus el-input的type=“number“时去除右边的上下箭头

改成 代码如下 <script lang"ts" setup> import {ref} from vue const inputBtn ref() </script> <template><el-input type"number" v-model"inputBtn" style"width: 80px;" class"no_number">…

超长表单分页校验,下一页和上一页功能

父组件(最外层) <template><xx-layout title"练习"><divslot"content"class"hierarchy-tag-main"><el-steps:space"200":active"currentComponentIndex 1"align-centerstyle"margin-bottom: 30…

Flutter横屏实践

1、Flutter设置横屏 // 强制横屏 SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight ]); // 强制竖屏 SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);另…

【虹科分享】什么是Redis数据集成(RDI)?

大量的应用程序、日益增长的用户规模、不断扩展的技术需求&#xff0c;以及对即时响应的持续追求。想想这些是否正是你在经历的。也许你尝试过自己构建工具来应对这些需求&#xff0c;但是大量的编码和集成工作使你焦头烂额。那你是否知道&#xff0c;有这样一个工具可以帮助你…

数据结构-图-最小生成树问题

最小生成树 并查集定义举例说明查找某个元素属于哪个集合代码实现路径压缩 Kruskal算法原理代码实现 Prim算法原理代码实现 并查集 定义 &#x1f680;在一些应用问题中&#xff0c;需要将n个不同的元素分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&…

小商品公众号微信店铺搭建的作用是什么

小商品顾名思义就是价格低、需求广且数量多的日用产品&#xff0c;覆盖人群非常广&#xff0c;无论线上还是线下总能找到目标客户&#xff0c;铅笔、削皮刀、晾衣架等各式产品琳琅满目&#xff0c;不少商家也是热衷于小商品的售卖。 从整体来看&#xff0c;小商品商家也可线上…

tomcat整体架构

Tomcat介绍 Tomcat是Apache Software Foundation&#xff08;Apache软件基金会&#xff09;开发的一款开源的Java Servlet 容器。它是一种Web服务器&#xff0c;用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可 以为Java Web应用程序提供运行环境&#x…

刚入职字节外包一个月,我却离职了...

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…