Spring Boot 整合SpringSecurity后,实现JWT令牌颁发

简介: Spring Boot 整合SpringSecurity后,实现JWT令牌颁发

前言

接上次,整合SpringSecurity后,我们进行jwt的整合

JWT令牌颁发

导jar包

 <dependency>
     <groupId>com.auth0</groupId>
     <artifactId>java-jwt</artifactId>
     <version>4.3.0</version>
 </dependency>

创建utils包,与JwtUtils类

)5BW4IN}B02VOJX{OV8`172.png

根据用户信息创建Jwt令牌

由于我们的JWT令牌需要在根据用户信息创建,所以我们要在Spring Security登录成功里面的处理器进行创建。

那用户信息怎么读呢?

在Spring Security中,认证成功后,会将用户的信息封装成Authentication对象,并存储在SecurityContextHolder中。 所以我们可以通过authentication.getPrincipal()authentication.getPrincipal()是用于获取当前认证成功的用户对象

authentication.getPrincipal()返回的是一个Principal对象,用户信息实际上是存储在该对象中的。在大多数情况下,Principal对象会实现UserDetails接口,因此可以将其强制转换为UserDetails类型以方便获取用户的详细信息,如用户名、过期时间、角色等。

I)%%35M5IM9XB]2%ADIQCQG.png

正式创建Jwt令牌

我们回到JwtUtils工具类中,因为我们用户信息是UserDetails类型,所以传入的对象也是这个类型,注意我们UserDetails里面是没有id的,而且有可能里面是存储的是邮箱不是用户名,所以id和用户名要另外传入

密钥与过期时间我们放在配置类中读取,过期时间不要太长,要不然就是永久的了

7Q%RWUH0~TY`~Z%]N{KE2FF.png

@BTWLWYTFS3`C`)65ZX621Q.pngTDLU)@XFA6X~QBVK]GZIG8A.png

     @Value("${spring.security.jwt.key}")
     private String key;
 ​
     @Value("${spring.security.jwt.expire}")
     private int expire;
 ​
     public String createJwt(UserDetails user, String username, int userId) {
 ​
         Algorithm algorithm = Algorithm.HMAC256(key); // 使用HMAC256算法生成JWT的签名
         Date expire = this.expireTime(); // 设置JWT的过期时间
         return JWT.create()
                 .withJWTId(UUID.randomUUID().toString()) // 设置JWT的唯一标识
                 .withClaim("id", userId) // 设置用户id
                 .withClaim("name", username) // 设置用户名
                 .withClaim("authorities", user.getAuthorities() // 设置用户权限,将他转为集合形式
                         .stream()
                         .map(GrantedAuthority::getAuthority)
                         .toList())
                 .withExpiresAt(expire) // 设置JWT的过期时间
                 .withIssuedAt(new Date()) // 设置JWT的发布时间
                 .sign(algorithm); // 使用算法进行签名
     }
     /**
      * 根据配置快速计算过期时间
      * @return 过期时间
      */
     public Date expireTime(){
         // 创建一个Calendar对象
         Calendar calendar = Calendar.getInstance();
         // 将当前时间加上过期时间的小时数
         calendar.add(Calendar.HOUR, expire);
         // 返回计算后的过期时间
         return calendar.getTime();
     }


目录
打赏
0
0
0
0
0
分享
相关文章
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
796 5
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
1007 13
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
171 11
|
5月前
|
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
137 8
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
128 0
SpringBoot从入门到精通(三十四)如何集成JWT实现Token验证
近年来,随着前后端分离、微服务等架构的兴起,传统的cookie+session身份验证模式已经逐渐被基于Token的身份验证模式取代。接下来介绍如何在Spring Boot项目中集成JWT实现Token验证。
SpringBoot从入门到精通(三十四)如何集成JWT实现Token验证
SpringBoot集成JWT实现token验证
JWT官网: https://jwt.io/JWT(Java版)的github地址:https://github.com/jwtk/jjwt 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。
3911 0
Java:SpringBoot集成JWT实现token验证
Java:SpringBoot集成JWT实现token验证
235 0
Java:SpringBoot集成JWT实现token验证
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!

热门文章

最新文章