欧美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)資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

我們今天使用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)了這個幾個方法

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

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

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

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

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

下面是我的登錄頁面代碼

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

然后我們再看權(quán)限功能

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

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

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

在我標箭頭的這里, 如果你網(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)文章

  • Java多線程正確使用倒計時協(xié)調(diào)器CountDownLatch方法詳解

    Java多線程正確使用倒計時協(xié)調(diào)器CountDownLatch方法詳解

    這篇文章主要為大家介紹了Java多線程倒計時協(xié)調(diào)器CountDownLatch的正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • linux配置jdk環(huán)境變量簡單教程

    linux配置jdk環(huán)境變量簡單教程

    這篇文章主要為大家詳細介紹了linux配置jdk環(huán)境變量簡單教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java設(shè)計模式之中介者模式

    Java設(shè)計模式之中介者模式

    這篇文章介紹了Java設(shè)計模式之中介者模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Spring?Boot配置文件的語法規(guī)則詳解(properties和yml)

    Spring?Boot配置文件的語法規(guī)則詳解(properties和yml)

    這篇文章主要介紹了Spring?Boot配置文件的語法規(guī)則,主要介紹兩種配置文件的語法和格式,properties和yml,對于配置文件也有獨立的文件夾存放,主要用來存放一些需要經(jīng)過變動的數(shù)據(jù)(變量值),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • SpringBoot熔斷機制之CircuitBreaker詳解

    SpringBoot熔斷機制之CircuitBreaker詳解

    這篇文章主要介紹了SpringBoot熔斷機制之CircuitBreaker詳解,SpringBoot的熔斷機制在微服務架構(gòu)中扮演著重要角色,其中CircuitBreaker是其核心機制之一,用于防止服務的異常狀態(tài)影響到整個系統(tǒng)的運作,需要的朋友可以參考下
    2023-10-10
  • Java設(shè)計模式之橋梁(Bridge)模式

    Java設(shè)計模式之橋梁(Bridge)模式

    這篇文章主要介紹了Java設(shè)計模式之橋梁(Bridge)模式,文中有非常詳細的代碼示例,對正在學習Java設(shè)計模式的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • JavaWeb案例講解Servlet常用對象

    JavaWeb案例講解Servlet常用對象

    Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數(shù)據(jù)庫或應用程序之間的中間層
    2021-10-10
  • Java工具類BeanUtils庫介紹及實例詳解

    Java工具類BeanUtils庫介紹及實例詳解

    這篇文章主要介紹了Java工具類BeanUtils庫介紹及實例詳解,需要的朋友可以參考下
    2020-02-02
  • java遞歸處理單位人員組織機構(gòu)樹方式

    java遞歸處理單位人員組織機構(gòu)樹方式

    這篇文章主要介紹了java遞歸處理單位人員組織機構(gòu)樹方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java StringBuilder類相關(guān)知識總結(jié)

    Java StringBuilder類相關(guān)知識總結(jié)

    這篇文章主要介紹了Java StringBuilder類相關(guān)知識總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論