您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制”這篇文章吧。
首先呢,是一個SpringBoot 項目,連接數據庫,這里我使用的是mybaties.mysql, 下面是數據庫的表
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,'網站管理員'), (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='網站管理員'; /*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);
表創建完了之后呢, 我們就開始寫代碼了
我們要創建spring security 的配置文件, 因為代碼太長,所以我就直接截圖了, 小伙伴們不要想著COPY代碼哦,要自己手寫代碼
然后是一個實現了UserDetialsServer的類
這個類主要是實現了loadUserByname方法, 然后我們可以在這個類中注入我們的service 或者直接mapper接口, 然后方法內部根據username獲得該用戶, 然后再獲取這個用戶的權限
該類實現了UserDetials 接口, 然后里面有用戶對象, 角色對象(也可以是一個角色泛型的list集合)這個自定義的類實現了這個幾個方法
最重要的是第一個方法, 他會吧當前用戶的角色存起來, 只有兩段代碼 我就不多說了, 下面就是一些賬戶密碼可不可用什么的。
再回頭來說我們的loadUserByName方法, 我們把角色和用戶都set到這個類里面,然后返回。
這個一步只是驗證有沒有這個用戶,或者是這個賬戶能不能用
一個實現了AuthenticationProvider的類, 注入我們的CustmUserService, 然后從Authentication取得賬號和密碼,調用loadUserByName方法獲得賬戶信息, 再和頁面輸入的密碼進行比對, 如果不能用就拋異常, 如果能用的活,就把賬戶,賬戶密碼, 賬戶權限(角色)構建成UsernamePasswordAuthenticationToken返回,
下面是我的登錄頁面代碼
這就完成了登錄功能, 小伙伴們,一定要先按照我的代碼寫。 然后再自己去寫(因為有些東西說的不詳細)
然后我們再看權限功能
/test1 是只有super_admin才能訪問的, /test2 是只有shopping_admin才能訪問的(是有缺點的)
當然這里的話 是這樣寫就行, 我們再看頁面上的
這里其實是有坑的, 為什么呢, 我們debug查看hasRole的源碼
在我標箭頭的這里, 如果你網頁上寫的參數不帶ROLE_的話,他會強制給你加上, 然后如果你數據庫里面的角色是admin,網頁里面寫的也是admin, 在這個就會用admin和ROLE_admin 匹配, 然后就不行
我的解決方法目前有兩種: 1.數據庫里面的角色就加上ROLE_
2. 添加角色時加上ROLE_
還有個問題就是第一張圖那個的hasRole不能加ROLE_, 如果加了就會報錯, 第一個加了沒錯, 第二個加了就報錯了
以上是“SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。