欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制

 更新時間:2022年01月05日 09:33:52   作者:海威的技術(shù)博客  
這篇文章主要給大家介紹了關(guān)于SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

我們今天使用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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis中#號與美元符號的區(qū)別

    MyBatis中#號與美元符號的區(qū)別

    #{變量名}可以進(jìn)行預(yù)編譯、類型匹配等操作,#{變量名}會轉(zhuǎn)化為jdbc的類型。很多朋友不清楚在mybatis中#號與美元符號的不同,接下來通過本文給大家介紹兩者的區(qū)別,感興趣的朋友參考下吧
    2017-01-01
  • Java程序執(zhí)行過程及內(nèi)存機制詳解

    Java程序執(zhí)行過程及內(nèi)存機制詳解

    本講將介紹Java代碼是如何一步步運行起來的,還會介紹Java程序所占用的內(nèi)存是被如何管理的:堆、棧和方法區(qū)都各自負(fù)責(zé)存儲哪些內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2020-12-12
  • 使用ShardingSphere-Proxy實現(xiàn)分表分庫

    使用ShardingSphere-Proxy實現(xiàn)分表分庫

    這篇文章介紹了使用ShardingSphere-Proxy實現(xiàn)分表分庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Java畢業(yè)設(shè)計實戰(zhàn)之在線高中考試系統(tǒng)的實現(xiàn)

    Java畢業(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)第二次讀取為空問題

    解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀

    這篇文章主要給大家介紹了關(guān)于如何解決調(diào)用ftpClient.retrieveFileStream(String?remoteFilePath)第二次讀取為空問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • MyBatis自定義typeHandler的完整實例

    MyBatis自定義typeHandler的完整實例

    這篇文章主要給大家介紹了關(guān)于MyBatis自定義typeHandler的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    這篇文章主要介紹了詳解Spring Boot中整合Sharding-JDBC讀寫分離示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java?AQS?原理與?ReentrantLock?實現(xiàn)方法

    Java?AQS?原理與?ReentrantLock?實現(xiàn)方法

    AQS 的作用是解決同步器的實現(xiàn)問題,它將復(fù)雜的同步器實現(xiàn)分解為簡單的框架方法,開發(fā)者只需要實現(xiàn)少量特定的方法就能快速構(gòu)建出可靠的同步器,這篇文章主要介紹Java AQS原理與ReentrantLock實現(xiàn),需要的朋友可以參考下
    2025-03-03
  • SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制

    SpringBoot中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
  • SpringBoot如何整合SpringDataJPA

    SpringBoot如何整合SpringDataJPA

    這篇文章主要介紹了SpringBoot整合SpringDataJPA代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論