91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

發布時間:2022-01-05 11:06:12 來源:億速云 閱讀:176 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“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代碼哦,要自己手寫代碼

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

然后是一個實現了UserDetialsServer的類

這個類主要是實現了loadUserByname方法, 然后我們可以在這個類中注入我們的service 或者直接mapper接口, 然后方法內部根據username獲得該用戶, 然后再獲取這個用戶的權限

第二步是封裝一個自定義的類

該類實現了UserDetials 接口, 然后里面有用戶對象, 角色對象(也可以是一個角色泛型的list集合)這個自定義的類實現了這個幾個方法

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

最重要的是第一個方法, 他會吧當前用戶的角色存起來, 只有兩段代碼 我就不多說了, 下面就是一些賬戶密碼可不可用什么的。

再回頭來說我們的loadUserByName方法, 我們把角色和用戶都set到這個類里面,然后返回。

這個一步只是驗證有沒有這個用戶,或者是這個賬戶能不能用

第三步, 我們需要判斷密碼啦

一個實現了AuthenticationProvider的類, 注入我們的CustmUserService, 然后從Authentication取得賬號和密碼,調用loadUserByName方法獲得賬戶信息, 再和頁面輸入的密碼進行比對, 如果不能用就拋異常, 如果能用的活,就把賬戶,賬戶密碼, 賬戶權限(角色)構建成UsernamePasswordAuthenticationToken返回, 

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

下面是我的登錄頁面代碼

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

這就完成了登錄功能, 小伙伴們,一定要先按照我的代碼寫。 然后再自己去寫(因為有些東西說的不詳細)

然后我們再看權限功能

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

/test1 是只有super_admin才能訪問的, /test2 是只有shopping_admin才能訪問的(是有缺點的)

當然這里的話 是這樣寫就行, 我們再看頁面上的

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

這里其實是有坑的, 為什么呢, 我們debug查看hasRole的源碼

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

在我標箭頭的這里, 如果你網頁上寫的參數不帶ROLE_的話,他會強制給你加上, 然后如果你數據庫里面的角色是admin,網頁里面寫的也是admin, 在這個就會用admin和ROLE_admin 匹配, 然后就不行

我的解決方法目前有兩種: 1.數據庫里面的角色就加上ROLE_ 

                                            2. 添加角色時加上ROLE_

還有個問題就是第一張圖那個的hasRole不能加ROLE_, 如果加了就會報錯, 第一個加了沒錯, 第二個加了就報錯了

SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制

以上是“SpringBoot怎么整合Springsecurity實現數據庫登錄及權限控制”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

娄底市| 滨州市| 博白县| 湖南省| 长乐市| 中山市| 西安市| 丹阳市| 颍上县| 苗栗县| 安龙县| 沈丘县| 临洮县| 宁国市| 济南市| 德令哈市| 连云港市| 确山县| 嘉禾县| 徐闻县| 吴堡县| 正宁县| 平塘县| 大竹县| 华容县| 莱西市| 凌源市| 鄂温| 天全县| 阜阳市| SHOW| 广南县| 宜章县| 宝山区| 疏附县| 惠州市| 浦城县| 新和县| 佳木斯市| 札达县| 舒兰市|