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)了這個幾個方法
最重要的是第一個方法, 他會吧當(dāng)前用戶的角色存起來, 只有兩段代碼 我就不多說了, 下面就是一些賬戶密碼可不可用什么的。
再回頭來說我們的loadUserByName方法, 我們把角色和用戶都set到這個類里面,然后返回。
這個一步只是驗證有沒有這個用戶,或者是這個賬戶能不能用
第三步, 我們需要判斷密碼啦
一個實現(xiàn)了AuthenticationProvider的類, 注入我們的CustmUserService, 然后從Authentication取得賬號和密碼,調(diào)用loadUserByName方法獲得賬戶信息, 再和頁面輸入的密碼進(jìn)行比對, 如果不能用就拋異常, 如果能用的活,就把賬戶,賬戶密碼, 賬戶權(quán)限(角色)構(gòu)建成UsernamePasswordAuthenticationToken返回,
下面是我的登錄頁面代碼
這就完成了登錄功能, 小伙伴們,一定要先按照我的代碼寫。 然后再自己去寫(因為有些東西說的不詳細(xì))
然后我們再看權(quán)限功能
/test1 是只有super_admin才能訪問的, /test2 是只有shopping_admin才能訪問的(是有缺點的)
當(dāng)然這里的話 是這樣寫就行, 我們再看頁面上的
這里其實是有坑的, 為什么呢, 我們debug查看hasRole的源碼
在我標(biāo)箭頭的這里, 如果你網(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+Spring Security+JWT實現(xiàn)RESTful Api權(quán)限控制的方法
- Springboot+Shiro+Jwt實現(xiàn)權(quán)限控制的項目實踐
- Springboot+Spring Security實現(xiàn)前后端分離登錄認(rèn)證及權(quán)限控制的示例代碼
- Java SpringBoot 使用攔截器作為權(quán)限控制的實現(xiàn)方法
- Springboot和bootstrap實現(xiàn)shiro權(quán)限控制配置過程
- Springboot+Vue+shiro實現(xiàn)前后端分離、權(quán)限控制的示例代碼
- SpringBoot整合Shiro實現(xiàn)權(quán)限控制的代碼實現(xiàn)
- SpringBoot詳解shiro過濾器與權(quán)限控制
- SpringBoot集成Swagger使用SpringSecurity控制訪問權(quán)限問題
- 淺談基于SpringBoot實現(xiàn)一個簡單的權(quán)限控制注解
- SpringSecurity實現(xiàn)RBAC權(quán)限管理
相關(guān)文章
使用ShardingSphere-Proxy實現(xiàn)分表分庫
這篇文章介紹了使用ShardingSphere-Proxy實現(xiàn)分表分庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02Java畢業(yè)設(shè)計實戰(zhàn)之在線高中考試系統(tǒng)的實現(xiàn)
這是一個使用了java+SSM+Jsp+Mysql+Maven開發(fā)的在線高中考試系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習(xí),具有考試系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧2022-02-02解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀
這篇文章主要給大家介紹了關(guān)于如何解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀取為空問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08詳解Spring Boot中整合Sharding-JDBC讀寫分離示例
這篇文章主要介紹了詳解Spring Boot中整合Sharding-JDBC讀寫分離示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03Java?AQS?原理與?ReentrantLock?實現(xiàn)方法
AQS 的作用是解決同步器的實現(xiàn)問題,它將復(fù)雜的同步器實現(xiàn)分解為簡單的框架方法,開發(fā)者只需要實現(xiàn)少量特定的方法就能快速構(gòu)建出可靠的同步器,這篇文章主要介紹Java AQS原理與ReentrantLock實現(xiàn),需要的朋友可以參考下2025-03-03SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制
本文主要介紹了SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08