如何将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() 等,让你的数据类更加简洁。
阅读全文