通過前一篇文章 整合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
結束語
使用數據庫進行鑑權,是實際應用中最基本的需求。