spring boot3登录开发(整合jwt)

Spring Boot 3 整合 JWT(JSON Web Tokens)用于登录开发涉及多个步骤。JWT 是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。这些信息可以被验证和信任,因为它们是数字签名的。

以下是一个简单的步骤指南,用于在 Spring Boot 3 应用中整合 JWT:

1. 添加依赖

首先,在你的 pom.xml 文件中添加 Spring Boot Web 和 JWT 相关的依赖:

<dependencies>  <!-- Spring Boot Web Starter -->  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <!-- JWT Library, 例如 jjwt -->  <dependency>  <groupId>io.jsonwebtoken</groupId>  <artifactId>jjwt</artifactId>  <version>你的jjwt版本号</version>  </dependency>  <!-- 其他依赖 -->  
</dependencies>

2. 配置 JWT

创建一个配置类,配置 JWT 的密钥和有效期等:

import io.jsonwebtoken.SignatureAlgorithm;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  @Configuration  
public class JwtConfig {  public static final String SECRET_KEY = "你的密钥"; // 生产环境中请确保此密钥的安全性  public static final long JWT_EXPIRATION_MS = 86400000; // 24小时  @Bean  public SignatureAlgorithm signatureAlgorithm() {  return SignatureAlgorithm.HS512; // 使用HS512算法  }  
}

application.propertiesapplication.yml文件中配置JWT相关的属性,如密钥、过期时间等。

jwt:  secret: your-secret-key  expiration: 86400000 # 1天,单位:毫秒

3. 创建 JWT 工具类

创建一个工具类,用于生成和验证 JWT:

import io.jsonwebtoken.Claims;  
import io.jsonwebtoken.Jwts;  
import io.jsonwebtoken.SignatureException;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Component;  import java.util.Date;  
import java.util.function.Function;  @Component  
public class JwtTokenUtil {  @Autowired  private SignatureAlgorithm signatureAlgorithm;  public String generateToken(String userId) {  Date now = new Date();  Date expirationDate = new Date(now.getTime() + JwtConfig.JWT_EXPIRATION_MS);  return Jwts.builder()  .setClaims(getClaims(userId))  .setExpiration(expirationDate)  .signWith(signatureAlgorithm, JwtConfig.SECRET_KEY)  .compact();  }  private Claims getClaims(String userId) {  return Jwts.claims().setId(userId);  }  public String getUserIdFromToken(String token) {  Claims claims = getAllClaimsFromToken(token);  return claims.getId();  }  public boolean validateToken(String token, String userId) {  final String userIdFromToken = getUserIdFromToken(token);  return (userIdFromToken != null && userId.equals(userIdFromToken));  }  private Claims getAllClaimsFromToken(String token) {  Claims claims;  try {  claims = Jwts.parser()  .setSigningKey(JwtConfig.SECRET_KEY)  .parseClaimsJws(token)  .getBody();  } catch (SignatureException e) {  claims = null;  }  return claims;  }  
}

4. 创建登录接口

在你的 Controller 中,创建处理登录请求的接口:

import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.*;  @RestController  
@RequestMapping("/api/auth")  
public class AuthController {  @Autowired  private AuthService authService;  @PostMapping("/login")  public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest) {  String token = authService.login(loginRequest);  return ResponseEntity.ok(new TokenResponse(token));  }  
}

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

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

相关文章

香港驾照好处 大陆驾驶证换香港驾照条件 大陆驾驶证换香港驾照流程

持有香港驾驶证的好处&#xff1a; 1、国际认可&#xff1a;香港驾驶证在国际上被广泛认可&#xff0c;持有该驾驶证可以在许多国家和地区自由驾驶。 2、多样性&#xff1a;香港驾驶证覆盖了多种车辆类型&#xff0c;包括轿车、摩托车、巴士、卡车等&#xff0c;持有该驾驶证…

【vue】computed和watch的区别和应用场景

Computed 和 Watch 是 Vue.js 中用于监视数据变化的两个不同特性&#xff0c;它们各自有不同的应用场景和功能。 Computed&#xff1a; 计算属性&#xff08;Computed properties&#xff09;用于声明基于其他数据属性的计算值。它具有缓存功能&#xff0c;只有在依赖的数…

GAMES Webinar 288-VR/AR专题-陆峰-混合现实中的多模态自然人机交互

感知交互增强智能 研究室虚拟现实技术与系统国家重点实验室&#xff0c;北京航空航天大学计算医学研究所&#xff0c;大数据精准医疗北京市高精尖创新中心 Perception & Hybrid Interaction (PHI) for Augmented & Affective Intelligence (A2I) We are working on v…

力扣56. 合并区间

Problem: 56. 合并区间 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.将数组按内部的一维数组的第一项按从小到大的顺序排序&#xff1b; 2.创建二维结果数组merged&#xff0c;并将排序后的数组中的第一个一维度数组存入到merged中&#xff1b; 3.从后面的一…

最长公共子序列力扣题

动态规划。 美团暑期面试题&#xff0c;没做过&#xff0c;不会啊。 这个问题的目标是找出两个字符串text1和text2的最长公共子序列的长度。 动态规划数组的初始化 首先&#xff0c;代码初始化了一个动态规划&#xff08;DP&#xff09;数组dp&#xff0c;其维度为(m 1) x …

九泰智库 | 医械周刊- Vol.17

⚖️ 法规动态 器审中心公示新一期医疗器械优先审批申请审核结果 3月22日&#xff0c;依据原国家食品药品监督管理总局《医疗器械优先审批程序》&#xff08;总局公告2016年168号&#xff09;&#xff0c;器审中心对申请优先审批的医疗器械注册申请进行了审核&#xff0c;对相关…

elasticsearch _cat/indices docs.count is different than <index>/_count

今天遇到一个问题&#xff0c;kibana中看到文档数与下面语句查询到的不同 GET /_cat/count/jiankunking_xxxxx_product_expand_test?v GET /jiankunking_xxxxx_product_expand_test/_search?track_total_hitstrue语句查询结果 epoch timestamp count 1711433785 06:16…

详解从ERP传到MES系统的数据

1、物料需求计划 MES系统提供的物料需求计划与传统BOM-MRP方式提供的物料需求计划有本质的不同。首先&#xff0c;满足产能约束、各种生产约束、优化生产调度、提高工作效率的要求。其次&#xff1a;它有详细的以分钟为单位的时间信息。将这些数据提供给ERP&#xff0c;可以大…

是德科技KEYSIGHT N9938A频谱分析仪

181/2461/8938产品概述&#xff1a; N9938A 是一款使用电池供电的便携式微波频谱分析仪&#xff1b;配置还包括全频段跟踪发生器和前置放大器、干扰分析仪、时间选通、VSWR 和反射测量、内置功率计。 N9938A FieldFox 手持式微波频谱分析仪 主要特性和功能 频率范围&#xff…

美团面试一面凉经

1.自我介绍 2.科研项目提问 没咋准备&#xff0c;说的有点没逻辑 3.问论坛项目 为什么用Redis实现登录&#xff1f;能不能用其他方式实现&#xff1f; 1、Redis 具备高性能 假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢&#xff0c;因为是从硬盘上读取的。将…

000_coolprop_in_matlab在Matlab中使用CoolProp

在Matlab中使用CoolProp 简介 CoolProp是一个开源的热力学性质库&#xff0c;可以计算多种流体的热力学性质。CoolProp支持多种编程语言&#xff0c;包括Python、C、Matlab等。本文将介绍如何在Matlab中使用CoolProp。 CoolProp官网 本文所使用的Matlab版本为R2021a。 在Ma…

每天一个数据分析题(二百二十九)

循环神经网络&#xff08;RNN&#xff09;是一种经典的神经网络。考虑到RNN的自然属性和结构&#xff0c;以下哪个任务RNN可能会比其他神经网络架构表现得更好&#xff1f; A. 从固定大小的图片中识别物体 B. 为未来几天的股票价格做时间序列预测 C. 在无标签数据上进行聚类…

C++基础--类和对象(上)--类与类成员及其成员函数

C基础--类和对象&#xff08;上&#xff09;--类与类成员及其成员函数 一、类的引入二、类的定义三、类的访问限定符及封装1、访问限定符2、封装 四、类的作用域五、类的实例化六、类的对象大小的计算七、类成员函数的 this 指针1、this指针的引出2、this指针的特性 八、总结 一…

Vit Transformer

一 VitTransformer 介绍 vit : An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 论文是基于Attention Is All You Need&#xff0c;由于图像数据和词数据数据格式不一样&#xff0c;经典的transformer不能处理图像数据&#xff0c;在视觉领域的应…

4、事件修饰符、过滤器、自定义指令、生命周期

一、事件修饰符 按键别名enter 回车 delete 删除键 esc取消键 space 空格键 <script> export default {name: "KeyUp",methods:{keyUp(e){ console.log(e) }},skip(){window.location.href "http:www.xx.com"} } </script> <template>…

鸿蒙应用开发-录音保存并播放音频

功能介绍&#xff1a; 录音并保存为m4a格式的音频&#xff0c;然后播放该音频&#xff0c;参考文档使用AVRecorder开发音频录制功能(ArkTS)&#xff0c;更详细接口信息请查看接口文档&#xff1a;ohos.multimedia.media (媒体服务)。 知识点&#xff1a; 熟悉使用AVRecorder…

super的使用细节

1、super的使用细节 2、super和this的比较

159.乐理基础-和声模板是什么?优缺点与运用要点

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里&#xff0c;这里面有五线谱对应的音名&#xff0c;对比着看 如果一章没落下&#xff0c;看到这里&#xff0c;但是看不懂什么意思&#xff0c;那就强行下看&#xff0c;看着看着指不…

kaggle-Prediction of Obesity Risk

使用 LGBMClassifier # https://www.kaggle.com/code/ddosad/ps4e2-visual-eda-lgbm-obesity-risk import pandas as pd from lightgbm import LGBMClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split, GridSearch…

Java中的String字符串练习

目录 Java中的String字符串练习 01-用户登录 02-遍历字符串并统计字符个数 03-字符串拼接 04-字符串反转 注意点 05-金额转化(简单) 代码解释: 06-手机号屏蔽 07-身份证号码查看 易错点: 08-敏感词替换 01-用户登录 package com.xiaonan.exercise06;import java.u…