亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

我們今天使用SpringBoot來整合SpringSecurity,來吧,不多BB

首先呢,是一個(gè)SpringBoot 項(xiàng)目,連接數(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 '注冊(cè)時(shí)間',
  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)建完了之后呢, 我們就開始寫代碼了

第一步

我們要?jiǎng)?chuàng)建spring security 的配置文件, 因?yàn)榇a太長,所以我就直接截圖了, 小伙伴們不要想著COPY代碼哦,要自己手寫代碼

然后是一個(gè)實(shí)現(xiàn)了UserDetialsServer的類

這個(gè)類主要是實(shí)現(xiàn)了loadUserByname方法, 然后我們可以在這個(gè)類中注入我們的service 或者直接mapper接口, 然后方法內(nèi)部根據(jù)username獲得該用戶, 然后再獲取這個(gè)用戶的權(quán)限

第二步是封裝一個(gè)自定義的類

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

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

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

這個(gè)一步只是驗(yàn)證有沒有這個(gè)用戶,或者是這個(gè)賬戶能不能用

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

一個(gè)實(shí)現(xiàn)了AuthenticationProvider的類, 注入我們的CustmUserService, 然后從Authentication取得賬號(hào)和密碼,調(diào)用loadUserByName方法獲得賬戶信息, 再和頁面輸入的密碼進(jìn)行比對(duì), 如果不能用就拋異常, 如果能用的活,就把賬戶,賬戶密碼, 賬戶權(quán)限(角色)構(gòu)建成UsernamePasswordAuthenticationToken返回, 

下面是我的登錄頁面代碼

這就完成了登錄功能, 小伙伴們,一定要先按照我的代碼寫。 然后再自己去寫(因?yàn)橛行〇|西說的不詳細(xì))

然后我們?cè)倏礄?quán)限功能

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

當(dāng)然這里的話 是這樣寫就行, 我們?cè)倏错撁嫔系?/p>

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

在我標(biāo)箭頭的這里, 如果你網(wǎng)頁上寫的參數(shù)不帶ROLE_的話,他會(huì)強(qiáng)制給你加上, 然后如果你數(shù)據(jù)庫里面的角色是admin,網(wǎng)頁里面寫的也是admin, 在這個(gè)就會(huì)用admin和ROLE_admin 匹配, 然后就不行

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

                                            2. 添加角色時(shí)加上ROLE_

還有個(gè)問題就是第一張圖那個(gè)的hasRole不能加ROLE_, 如果加了就會(huì)報(bào)錯(cuò), 第一個(gè)加了沒錯(cuò), 第二個(gè)加了就報(bào)錯(cuò)了

那么該用第幾種方法呢?

總結(jié)

到此這篇關(guān)于SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制的文章就介紹到這了,更多相關(guān)SpringBoot整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線高中考試系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+SSM+Jsp+Mysql+Maven開發(fā)的在線高中考試系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(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的完整實(shí)例

    MyBatis自定義typeHandler的完整實(shí)例

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

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

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

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

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

    SpringBoot中MapStruct實(shí)現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制

    本文主要介紹了SpringBoot中MapStruct實(shí)現(xiàn)優(yōu)雅的數(shù)據(jù)復(fù)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • SpringBoot如何整合SpringDataJPA

    SpringBoot如何整合SpringDataJPA

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

最新評(píng)論