通过前一篇文章 整合SpringSecurity之最简登录及方法鉴权,我们已经可以简单地使用 SpringSecurity 对应用实现登录鉴权,但是问题在于,用户信息或者是在配置文件中,或者是在代码中写死,应用启动后被加载至内存,这并不符合实际的生产需要,在实际的生产应用中,我们需要使用数据库对用户及角色信息进行持久化,在执行登录操作时,从数据库中获取用户信息。
目标
整合 SpringSecurity 及 MybatisPlus 实现使用读取数据库数据进行登陆鉴权
准备工作
创建用户表 s_user、角色表 s_role、用户角色关系表 s_user_role
CREATE TABLE `s_role` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CREATE_ID` int(11) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_ID` int(11) DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`CODE` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '角色编码',
`ROLE_NAME` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '角色名称',
`STATE` int(2) DEFAULT '1' COMMENT '状态(1启用2禁用)',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='角色表';
CREATE TABLE `s_user` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CREATE_ID` int(11) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`UPDATE_ID` int(11) DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL,
`USER_NAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
`PASSWORD` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '密码',
`STATE` int(2) DEFAULT '1' COMMENT '用户状态(-1停用1正常2被锁定)',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表';
CREATE TABLE `s_user_role` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CREATE_ID` int(11) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL,
`USER_ID` int(11) DEFAULT NULL COMMENT '用户外键',
`ROLE_ID` int(11) DEFAULT NULL COMMENT '角色外键',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户角色表';
操作步骤
添加依赖
配置
配置一下数据源
编码
实体类
角色实体类 Role,实现权限接口 GrantedAuthority
用户实体类 user,实现权限接口 UserDetails,主要方法是 getAuthorities,用于获取用户的角色列表
用户角色关系实体
Repository 层
分别为三个实体类添加 Mapper
实现 UserDetailsService 接口
UserDetailsService 是 SpringSecurity 提供的登陆时用于根据用户名获取用户信息的接口
权限配置
继承 SpringSecurity 提供的 WebSecurityConfigurerAdapter 配置 userDetailsService 及加密方式
启动类
验证结果
初始化数据
执行测试用例进行初始化数据
校验
网页访问 http://localhost:8080,将自动跳转登录页,输入 user/123456 进行登录,可以使用 debugger 进行调试。
源码地址
本章源码 :https://github.com/caiyuanzi-song/boot.git
结束语
使用数据库进行鉴权,是实际应用中最基本的需求。