【万字长文】SpringBoot整合SpringSecurity+JWT+Redis完整教程(提供Gitee源码)

本文详述了SpringBoot项目中整合SpringSecurity、JWT和Redis的全过程,包括SpringSecurity简介、认证流程、核心代码解析以及运行项目步骤。文中详细介绍了每个关键类的作用和代码实现,如TokenService、AuthenticationEntryPointImpl、JwtAuthenticationTokenFilter等,并提供了完整的Gitee源码链接。通过此教程,读者可掌握如何构建一个安全的SpringBoot应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:最近在学习SpringSecurity的过程中,参考了很多网上的教程,同时也参考了一些目前主流的开源框架,于是结合自己的思路写了一个SpringBoot整合SpringSecurity+JWT+Redis完整的项目,从0到1写完感觉还是收获到不少的,于是我把我完整的笔记写成博客分享给大家,算是比较全的一个项目了,仅供大家参考和学习哦!

本篇博客提供的Gitee源码是SpringBoot2.5版本的,如果是2.5版本以上的请看这篇文章:SpringSecurity中的WebSecurityConfigurerAdapter已弃用解决方案(亲测可用)-优快云博客

目录

一、SpringSecurity简介

二、SpringSecurity认证流程

三、问题记录(重要)

四、项目核心代码讲解

4.1、导入pom依赖

4.2、yml配置文件

4.3、实体类

4.3.1、LoginBody登录实体类

4.3.2、Role角色类

4.3.3、User用户类

4.3.4、LoginUser登录用户信息

4.4、TokenService服务类

4.4.1、生成令牌核心代码

4.4.2、生成令牌关键逻辑

4.4.3、解析令牌核心代码

4.4.4、获取请求头中携带的令牌

4.4.5、获取Redis中存放的令牌Key

4.4.6、刷新令牌有效期

4.4.7、验证令牌有效期

4.4.8、获取用户身份信息

4.4.9、删除用户身份信息

4.5、AuthenticationEntryPointImpl配置认证失败处理类

4.6、JwtAuthenticationTokenFilter认证过滤器

4.7、FastJson序列化

4.8、自定义Redis序列化 

4.9、Redis工具类

4.10、SecurityConfig核心配置类

4.11、AuthenticationContextHolder线程本地的存储

4.12、UserServiceImpl查询用户接口

4.13、PasswordServiceImpl密码验证服务类 

4.14、UserDetailsServiceImpl认证用户服务类

4.15、LoginController登录接口

4.16、LoginServiceImpl登录接口核心逻辑

4.17、LogoutSuccessHandlerImpl退出登录核心逻辑 

4.18、@PreAuthorize注解

4.19、HelloController测试接口

4.20、总结

五、运行项目 

5.1、登录成功

5.2、访问无权限接口

5.3、访问需要USER权限的接口

5.4、访问需要COMMON权限的接口

5.5、退出登录

5.6、访问失败 

5.7、登录失败

六、Gitee源码地址

七、总结


MySQL多数据源是指在一个应用程序中同时使用多个不同的MySQL数据库来存储和管理数据的技术。它可以帮助开发人员更灵活地处理各种数据库操作,提高程序的性能和可扩展性。下面是一个完整的MySQL多数据源教程。 一、设置数据库连接信息 1. 在应用程序的配置文件中,创建多个数据库连接的配置项。例如,可以为每个数据源创建一个配置项,分别命名为db1、db2等。 2. 在配置项中,设置每个数据源的连接信息,包括数据库地址、用户名、密码等。 二、创建数据源管理器 1. 创建一个数据源管理器类,用于管理多个数据源。该类需要实现数据源的动态切换和获取。 2. 使用Java的线程安全的数据结构,如ConcurrentHashMap来存储数据源信息。将配置文件中的数据库连接信息加载到数据结构中。 3. 实现方法来切换不同的数据源,通过传入数据源的名称来切换到对应的数据库。 三、实现数据源切换 1. 在应用程序中,根据业务需求选择需要使用的数据源。可以通过调用数据源管理器的方法来切换数据源。 2. 在DAO层的代码中,根据当前使用的数据源名称,选择对应的数据源进行数据库操作。 四、使用多数据源进行数据库操作 1. 在DAO层的代码中,区分不同的数据源,并将数据库操作的代码包装在对应的数据源中。 2. 在业务层的代码中,调用DAO层的方法来进行数据库操作。不同的数据源会自动切换。 五、处理事务 1. 如果需要在一个事务中操作多个数据源,可以使用分布式事务的方式来处理。 2. 可以使用开源的分布式事务框架,如Atomikos、Bitronix等来实现多数据源的事务管理。 六、监控和维护 1. 使用监控工具来监控多个数据源的使用情况,包括连接数、查询次数等。 2. 定期对数据库进行维护,包括索引优化、数据清理等工作,以保证数据库的性能和稳定性。 通过以上步骤,我们可以实现MySQL多数据源的配置和使用。使用多数据源可以更好地管理和处理不同的数据库操作,在提高程序性能和可扩展性的同时,也提供了更灵活的数据操作方式。同时,需要注意合理选择和配置数据源,以及监控和维护数据库,以保证系统的运行效率和数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄团团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值