如何将SpringBoot3与SpringSecurity6整合,实现基于数据库的用户认证?
摘要:大家好,我是晓凡。 写在前面 上一篇文章中,我们了解了SpringSecurity怎么基于内存进行用户认证。但这还远远不够,在实际开发中。 用户往往都存在于数据库,所以从这篇文章开始,我们就要开始学习基于数据库的用户认证。 一、认证流程 其
大家好,我是晓凡。
写在前面
上一篇文章中,我们了解了SpringSecurity怎么基于内存进行用户认证。但这还远远不够,在实际开发中。
用户往往都存在于数据库,所以从这篇文章开始,我们就要开始学习基于数据库的用户认证。
一、认证流程
其实基于数据库的用户认证和基于内存认证大同小异,我们只需要将从内存获取用户信息,换成从数据库获取用户信息即可。
换成代码就是替换掉InMermoryUserDetailManager 实现类,自己去实现UserDetailsService,从数据库查询用户然后返回。
二、SpringBoot3整合数据库
在进行认证前,我们需要保证SpringBoot能正常整合数据库,查询用户信息。这里我们使用的数据库是MySQL8.0。
2.1 创建数据库、表、插入数据
①创建数据库
我们这里创建一个security-demo的数据库
-- 创建数据库
CREATE DATABASE `security-demo`;
USE `security-demo`;
② 创建用户
-- 创建用户表
CREATE TABLE `user`(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -- 主键ID
`username` VARCHAR(50) DEFAULT NULL , -- 用户名
`password` VARCHAR(500) DEFAULT NULL, -- 密码
`enabled` BOOLEAN NOT NULL -- 是否启用
);
③ 创建唯一索引
在这里一个用户的用户名username字段肯定是不能重复的,所以要为username创建唯一索引,保证username的唯一
CREATE UNIQUE INDEX `user_username_uindex` ON `user`(`username`);
④ 插入数据
为了方便测试,我们默认插入几个用户。为了安全起见,这里密码采用SpringSecurity默认的bcrypt加密方式。不清楚的小伙可以先不用管,再后面的文章中会详细介绍到密码加密算法
-- 插入用户数据(密码是 "password" )
INSERT INTO `user` (`username`, `password`, `enabled`) VALUES
('admin', '{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW', TRUE),
('xiezhr', '{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW', TRUE),
('xiaofan', '{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW', TRUE);
2.2 配置Lombok
为了偷懒,我们还引入了Lombok 。 使用Lombok ,可以让我们避免写get、set、toString等样板式代码。堪称偷懒神器,解放了双手。
① 下面例举了怎么使用Lombok 来偷懒
简化 Getter 和 Setter 方法:在传统的 Java 开发中,你经常需要为每个类的属性手动编写 Getter 和 Setter 方法,但是有了 Lombok,你只需要在属性上加上 @Getter 和 @Setter 注解,Lombok 就会为你自动生成这些方法。
自动生成构造函数:通过 @NoArgsConstructor、@RequiredArgsConstructor 或 @AllArgsConstructor 注解,你可以快速生成无参构造函数、带有必需参数的构造函数或者带有全部参数的构造函数。
自动生成 equals 和 hashCode 方法: 通过 @EqualsAndHashCode 注解,Lombok 会根据类的字段自动生成 equals() 和 hashCode() 方法,让你的类更易于比较和使用在集合中。
日志记录更轻松: 使用 @Slf4j 注解,你可以直接在类中使用 log 对象,而无需手动创建日志记录器。
简化异常抛出: 通过 @SneakyThrows 注解,你可以在方法中抛出受检异常,而无需显式地在方法上声明或捕获它们。
数据类简化: 使用 @Data 注解,Lombok 会为你自动生成所有常用方法,如 Getter、Setter、toString() 等,让你的数据类更加简洁。
