【网页会话技术jwt在springboot实现】

news/2025/2/14 2:42:15/

文章目录

  • 网页会话技术 JWT 在 Spring Boot 实现
    • 什么是JWT?
    • Spring Boot中实现JWT
      • 1. 引入依赖
      • 2. 创建JWT工具类
      • 3. 使用JWT进行认证
      • 4. 验证JWT

网页会话技术 JWT 在 Spring Boot 实现

什么是JWT?

JWT是一种紧凑且自包含的方式,用于在各方之间安全地传输信息。它可以包含用户的身份信息以及其他相关信息,如权限和有效期。JWT的结构通常由三部分组成:Header(头部)、Payload(负载)和Signature(签名)。

  • Header(头部) 包含了令牌的元数据,如令牌的类型和使用的签名算法。
  • Payload(负载) 包含了实际的数据,如用户ID、用户名和过期时间。
  • Signature(签名) 是对Header和Payload的签名,用于验证令牌的真实性和完整性。

Spring Boot中实现JWT

1. 引入依赖

<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>

2. 创建JWT工具类

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 = "your-secret-key";public String generateToken(String username) {Date now = new Date();Date expiration = new Date(now.getTime() + 86400000); // 24小时后过期return Jwts.builder().setSubject(username).setIssuedAt(now).setExpiration(expiration).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;}}
}

3. 使用JWT进行认证

@RestController
@RequestMapping("/auth")
public class AuthController {@Autowiredprivate JwtUtils jwtUtils;@PostMapping("/login")public ResponseEntity<String> login(@RequestBody LoginRequest loginRequest) {// 根据用户名和密码进行认证,如果认证成功,生成JWT并返回给客户端String token = jwtUtils.generateToken(loginRequest.getUsername());return ResponseEntity.ok(token);}
}

4. 验证JWT

@RestController
@RequestMapping("/secure")
public class SecureController {@Autowiredprivate JwtUtils jwtUtils;@GetMapping("/data")public ResponseEntity<String> secureData(@RequestHeader("Authorization") String authHeader) {String token = authHeader.substring(7); // 剥离Bearer前缀if (jwtUtils.validateToken(token)) {String username = jwtUtils.getUsernameFromToken(token);// 根据用户名获取受保护的数据// 返回受保护数据return ResponseEntity.ok("Welcome, " + username + "! This is secure data.");} else {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token.");}}
}

http://www.ppmy.cn/news/1255562.html

相关文章

C++中用于动态内存的new和delete操作符

文章目录 1、动态分配内存的应用2、动态分配内存与分配给普通变量的内存有什么不同?3、C 中如何分配/释放内存4、new 操作符4.1 使用new的语法4.2 初始化内存4.3 分配内存块4.4 普通数组声明 Vs 使用new4.5 如果运行时没有足够内存可用怎么办&#xff1f; 5、delete 操作符 C/…

【hacker送书活动第7期】Python网络爬虫入门到实战

第7期图书推荐 内容简介作者简介大咖推荐图书目录概述参与方式 内容简介 本书介绍了Python3网络爬虫的常见技术。首先介绍了网页的基础知识&#xff0c;然后介绍了urllib、Requests请求库以及XPath、Beautiful Soup等解析库&#xff0c;接着介绍了selenium对动态网站的爬取和S…

【CTA认证】Android8实现android6以下的应用运行时也要申请权限

需求 CTA入网认证&#xff0c;要求低版本比如Android6以下的应用&#xff0c;运行时&#xff0c;也需要有运行时权限(Runtime Permission)功能&#xff0c;不能默认就取到权限&#xff0c;必须人工在设置中打开才可。 环境 Android 8 实现 frameworks 修改思路是所有APP都…

拼多多财报解读:连接高质量供给与全球消费者,多多跨境动力澎湃

全面拥抱“高质量发展”新阶段后&#xff0c;拼多多再次交出一份惊人的成绩单。 11月28日&#xff0c;拼多多集团发布截至9月30日的2023年第三季度业绩报告。财报显示&#xff0c;拼多多集团今年第三季度收入为688.4亿元&#xff0c;同比增长93.9%&#xff1b;实现美国通用会计…

【Unity动画】为一个动画片段添加事件Events

动画不管播放到那一帧&#xff0c;我们都可以在这里“埋伏”一个事件&#xff08;调用一个函数并且给函数传递一个参数&#xff0c;参数在外部设置&#xff0c;甚至传递一个物体&#xff09;&#xff01; 嗨&#xff0c;亲爱的Unity小伙伴们&#xff01;你是否曾想过为你的动画…

工作几年了,你真的懂 Redis 嘛?

大家好&#xff0c;我是伍六七。一个专注于输出 AI 编程内容的在职大厂资深程序员&#xff0c;全国最大 AI 付费社群破局初创合伙人&#xff0c;关注我一起破除 35 诅咒。 Redis 基本上是大部分技术公司都会使用的缓存框架&#xff0c;但是我发现很多程序员其实并不懂 Redis。 …

Mac下更新python

1. 查看python版本 python3 -V2. 更新python版本 brew upgrade python3. 查看python3的路径&#xff1a; which python34. 修改.bash_profile文件 vim ~/.bash_profile插入python默认执行文件 alias python"/usr/local/bin/python3"5. 应用环境变量 source ~/.…

在线 SQL 模拟器SQL Fiddle使用简介

在线 SQL 模拟器SQL Fiddle使用简介 本文可作为“SQL语言与SQL在线实验工具的使用” https://blog.csdn.net/cnds123/article/details/115038700 一文的补充。 有时候&#xff0c;我们想去验证 SQL语句&#xff0c;却缺少数据库环境&#xff0c;那该怎么办呢&#xff1f; 这…