SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制
我們今天使用SpringBoot來整合SpringSecurity,來吧,不多BB
首先呢,是一個SpringBoot 項目,連接數(shù)據(jù)庫,這里我使用的是mybaties.mysql, 下面是數(shù)據(jù)庫的表
DROP TABLE IF EXISTS `xy_role`; CREATE TABLE `xy_role` ( `xyr_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id', `xyr_name` char(30) DEFAULT NULL COMMENT '角色名稱', PRIMARY KEY (`xyr_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='角色'; /*Data for the table `xy_role` */ insert into `xy_role`(`xyr_id`,`xyr_name`) values (1,'ROLE_SUPERADMIN'), (2,'網(wǎng)站管理員'), (3,'ROLE_SHOPADMIN'); DROP TABLE IF EXISTS `xy_webadmin`; CREATE TABLE `xy_webadmin` ( `xywb_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id', `xywb_username` char(30) DEFAULT NULL COMMENT '用戶名', `xyr_id` int(11) DEFAULT NULL COMMENT '角色', `xywb_password` char(50) DEFAULT NULL COMMENT '密碼', `xywb_registertime` bigint(20) DEFAULT NULL COMMENT '注冊時間', PRIMARY KEY (`xywb_id`), KEY `FK_Reference_37` (`xyr_id`), CONSTRAINT `FK_Reference_37` FOREIGN KEY (`xyr_id`) REFERENCES `xy_role` (`xyr_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='網(wǎng)站管理員'; /*Data for the table `xy_webadmin` */ insert into `xy_webadmin`(`xywb_id`,`xywb_username`,`xyr_id`,`xywb_password`,`xywb_registertime`) values (1,'haiwei',1,'123456',1983), (2,'admin',3,'123456',1983), (3,'admin1',2,'123456',NULL);
表創(chuàng)建完了之后呢, 我們就開始寫代碼了
第一步
我們要創(chuàng)建spring security 的配置文件, 因為代碼太長,所以我就直接截圖了, 小伙伴們不要想著COPY代碼哦,要自己手寫代碼
然后是一個實現(xiàn)了UserDetialsServer的類
這個類主要是實現(xiàn)了loadUserByname方法, 然后我們可以在這個類中注入我們的service 或者直接mapper接口, 然后方法內(nèi)部根據(jù)username獲得該用戶, 然后再獲取這個用戶的權(quán)限
第二步是封裝一個自定義的類
該類實現(xiàn)了UserDetials 接口, 然后里面有用戶對象, 角色對象(也可以是一個角色泛型的list集合)這個自定義的類實現(xiàn)了這個幾個方法
最重要的是第一個方法, 他會吧當前用戶的角色存起來, 只有兩段代碼 我就不多說了, 下面就是一些賬戶密碼可不可用什么的。
再回頭來說我們的loadUserByName方法, 我們把角色和用戶都set到這個類里面,然后返回。
這個一步只是驗證有沒有這個用戶,或者是這個賬戶能不能用
第三步, 我們需要判斷密碼啦
一個實現(xiàn)了AuthenticationProvider的類, 注入我們的CustmUserService, 然后從Authentication取得賬號和密碼,調(diào)用loadUserByName方法獲得賬戶信息, 再和頁面輸入的密碼進行比對, 如果不能用就拋異常, 如果能用的活,就把賬戶,賬戶密碼, 賬戶權(quán)限(角色)構(gòu)建成UsernamePasswordAuthenticationToken返回,
下面是我的登錄頁面代碼
這就完成了登錄功能, 小伙伴們,一定要先按照我的代碼寫。 然后再自己去寫(因為有些東西說的不詳細)
然后我們再看權(quán)限功能
/test1 是只有super_admin才能訪問的, /test2 是只有shopping_admin才能訪問的(是有缺點的)
當然這里的話 是這樣寫就行, 我們再看頁面上的
這里其實是有坑的, 為什么呢, 我們debug查看hasRole的源碼
在我標箭頭的這里, 如果你網(wǎng)頁上寫的參數(shù)不帶ROLE_的話,他會強制給你加上, 然后如果你數(shù)據(jù)庫里面的角色是admin,網(wǎng)頁里面寫的也是admin, 在這個就會用admin和ROLE_admin 匹配, 然后就不行
我的解決方法目前有兩種: 1.數(shù)據(jù)庫里面的角色就加上ROLE_
2. 添加角色時加上ROLE_
還有個問題就是第一張圖那個的hasRole不能加ROLE_, 如果加了就會報錯, 第一個加了沒錯, 第二個加了就報錯了
那么該用第幾種方法呢?
總結(jié)
到此這篇關(guān)于SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制的文章就介紹到這了,更多相關(guān)SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot基于SpringSecurity表單登錄和權(quán)限驗證的示例
- Springboot整合SpringSecurity實現(xiàn)登錄認證和鑒權(quán)全過程
- Springboot+SpringSecurity實現(xiàn)圖片驗證碼登錄的示例
- SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢功能
- springboot+jwt+springSecurity微信小程序授權(quán)登錄問題
- SpringBoot 配合 SpringSecurity 實現(xiàn)自動登錄功能的代碼
- SpringBoot + SpringSecurity 短信驗證碼登錄功能實現(xiàn)
- SpringBoot+SpringSecurity處理Ajax登錄請求問題(推薦)
- SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能
相關(guān)文章
Java多線程正確使用倒計時協(xié)調(diào)器CountDownLatch方法詳解
這篇文章主要為大家介紹了Java多線程倒計時協(xié)調(diào)器CountDownLatch的正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09Spring?Boot配置文件的語法規(guī)則詳解(properties和yml)
這篇文章主要介紹了Spring?Boot配置文件的語法規(guī)則,主要介紹兩種配置文件的語法和格式,properties和yml,對于配置文件也有獨立的文件夾存放,主要用來存放一些需要經(jīng)過變動的數(shù)據(jù)(變量值),感興趣的朋友跟隨小編一起看看吧2024-07-07SpringBoot熔斷機制之CircuitBreaker詳解
這篇文章主要介紹了SpringBoot熔斷機制之CircuitBreaker詳解,SpringBoot的熔斷機制在微服務架構(gòu)中扮演著重要角色,其中CircuitBreaker是其核心機制之一,用于防止服務的異常狀態(tài)影響到整個系統(tǒng)的運作,需要的朋友可以參考下2023-10-10Java StringBuilder類相關(guān)知識總結(jié)
這篇文章主要介紹了Java StringBuilder類相關(guān)知識總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02