最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2024年10月23日 12:07:43   作者:海威  
本教程詳細(xì)介紹了如何使用SpringBoot整合SpringSecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄和權(quán)限控制,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

我們今天使用SpringBoot來(lái)整合SpringSecurity,來(lái)吧,不多BB

首先呢,是一個(gè)SpringBoot 項(xiàng)目,連接數(shù)據(jù)庫(kù),這里我使用的是mybaties.mysql, 下面是數(shù)據(jù)庫(kù)的表

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太長(zhǎng),所以我就直接截圖了, 小伙伴們不要想著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)前用戶的角色存起來(lái), 只有兩段代碼 我就不多說(shuō)了, 下面就是一些賬戶密碼可不可用什么的。

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

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

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

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

下面是我的登錄頁(yè)面代碼

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

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

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

當(dāng)然這里的話 是這樣寫就行, 我們?cè)倏错?yè)面上的

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

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

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

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

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

那么該用第幾種方法呢?

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

相關(guān)文章

  • java基本教程之Thread中start()和run()的區(qū)別 java多線程教程

    java基本教程之Thread中start()和run()的區(qū)別 java多線程教程

    這篇文章主要介紹了Thread中start()和run()的區(qū)別,Thread類包含start()和run()方法,它們的區(qū)別是什么?下面將對(duì)此作出解答
    2014-01-01
  • Java?IO流—異常及捕獲異常處理?try…catch…finally

    Java?IO流—異常及捕獲異常處理?try…catch…finally

    這篇文章主要介紹了Java?IO流—異常及捕獲異常處理?try…catch…finally,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Servlet會(huì)話技術(shù)基礎(chǔ)解析

    Servlet會(huì)話技術(shù)基礎(chǔ)解析

    這篇文章主要介紹了Servlet會(huì)話技術(shù)基礎(chǔ)解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 關(guān)于String.format使用詳解

    關(guān)于String.format使用詳解

    文章介紹了Java中String.format的使用,通過(guò)格式說(shuō)明符實(shí)現(xiàn)簡(jiǎn)潔、可維護(hù)的字符串拼接,適用于日志生成、數(shù)據(jù)格式化、編號(hào)處理等場(chǎng)景,支持靈活的格式控制與null值處理,顯著提升代碼可讀性和靈活性
    2025-08-08
  • 使用Swagger實(shí)現(xiàn)接口版本號(hào)管理方式

    使用Swagger實(shí)現(xiàn)接口版本號(hào)管理方式

    這篇文章主要介紹了使用Swagger實(shí)現(xiàn)接口版本號(hào)管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談SpringBoot中properties、yml、yaml的優(yōu)先級(jí)

    淺談SpringBoot中properties、yml、yaml的優(yōu)先級(jí)

    優(yōu)先級(jí)低的配置會(huì)被先加載,所以優(yōu)先級(jí)高的配置會(huì)覆蓋優(yōu)先級(jí)低的配置,本文就來(lái)介紹一下SpringBoot中properties、yml、yaml的優(yōu)先級(jí),感興趣的可以了解一下
    2023-08-08
  • Java中@ConfigurationProperties實(shí)現(xiàn)自定義配置綁定問(wèn)題分析

    Java中@ConfigurationProperties實(shí)現(xiàn)自定義配置綁定問(wèn)題分析

    這篇文章主要介紹了@ConfigurationProperties實(shí)現(xiàn)自定義配置綁定問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot與velocity的結(jié)合的示例代碼

    SpringBoot與velocity的結(jié)合的示例代碼

    本篇文章主要介紹了SpringBoot與velocity的結(jié)合的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java線程優(yōu)先級(jí)和守護(hù)線程原理解析

    Java線程優(yōu)先級(jí)和守護(hù)線程原理解析

    這篇文章主要介紹了Java線程優(yōu)先級(jí)和守護(hù)線程原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案

    IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案

    這篇文章主要介紹了IntelliJ IDEA多屏后窗口不顯示問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

昌邑市| 丰城市| 手游| 武乡县| 连城县| 松溪县| 友谊县| 奎屯市| 苍山县| 砀山县| 云林县| 阜阳市| 且末县| 阜宁县| 高雄市| 嘉祥县| 门头沟区| 来凤县| 泽州县| 烟台市| 贵州省| 海林市| 鹿邑县| 南川市| 新晃| 高青县| 保靖县| 丰都县| 晴隆县| 临汾市| 浙江省| 云和县| 涡阳县| 谷城县| 合江县| 通化市| 洪湖市| 英山县| 济宁市| 龙江县| 维西|