Spring Security——基于数据库的用户信息认证
一、前言
上一篇文章里提到,可以通过 application.properties 配置文件和java配置(继承 WebSecurityConfigurerAdapter类)来进行用户信息的配置。其中在java配置里,我们是把用户信息写到了内存里,并没有将其持久化到数据库中,今天我们就来看下在 Spring Security 中,如何基于数据库进行用户信息的认证。
二、数据库建表
我们需要创建3张表,分别是user表、role表、user_role表,分别对应用户表、角色表、用户_角色中间表。每个表的对应sql语句已在下面贴出,在Navicat或其它工具新建查询执行便可创建。下面分别对表字段进行解释:
1.user表
- id,自增主键
- username,登录的用户名;
- password,经过加密的用户密码;
- enable,表示用户账号是否被禁用,默认为1,即默认启用;
- locked, 表示用户账号是否被锁定,默认为0,即默认未锁定;
- account_expire,表示用户账号是否过期,默认为0,即默认未过期;
- password_expire,表示用户密码是否过期,默认为0,即默认未过期。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT 1,
`locked` tinyint(1) NOT NULL DEFAULT 0,
`account_expire` tinyint(1) NOT NULL DEFAULT 0,
`password_expire` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'root', '$2a$10$ypnJvCAtep4JYQJgrYBwG.Mtd7KhjqraKUkHtT0JEa2I3WgQmY21K', 1, 0, 0, 0);
INSERT INTO `user` VALUES (2, 'boss', '$2a$10$OasZtTbr9CZjGGYeiWanCe6pfrptcexka8yvLD295ywN8Ebl/pRSa', 1, 0, 0, 0);
INSERT INTO `user` VALUES (3, 'staff', '$2a$10$G.dc1cycBAYgft/1Ul4gjOACVP8H/ljCIR56DufuMuIP6rbKxpJiO', 1, 0, 0, 0);
SET FOREIGN_KEY_CHECKS = 1;
2.role表
- id,自增主键;
- name,角色名,此处需要注意,Spring Security中用户角色名必须以Role_开头,可以选择在数据库中直接添加,也可以选择在java代码中进行拼接,此处是后者;
- description,角色介绍。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES (1, 'dba', '数据库管理员');
INSERT INTO `role`