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

Spring與Shiro整合及加載權(quán)限表達(dá)式問題

 更新時(shí)間:2019年12月19日 13:27:15   作者:StanleyBlogs  
這篇文章主要介紹了Spring與Shiro整合及加載權(quán)限表達(dá)式問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

如何加載權(quán)限表達(dá)式

我們?cè)谏险聝?nèi)容中畫了一張圖,里面有三個(gè)分項(xiàng),用戶 角色 權(quán)限;

那么接下來我們就要思考一個(gè)問題了,這三張表中的數(shù)據(jù)要從何而來呢?

用戶表

首先先看用戶表,用戶表的數(shù)據(jù)庫(kù)是從用戶注冊(cè)而來;

角色

角色的話肯定是我們手動(dòng)去創(chuàng)建出來,但是我們?cè)趧?chuàng)建角色之前呢?是不是需要先有權(quán)限后才能去創(chuàng)建角色呢?因?yàn)榻巧且蕾囉跈?quán)限,只要先有了權(quán)限,我們就可以講它們歸類,分配給我們某一個(gè)角色;

所以我們的突破口就是,權(quán)限該如何去加載這個(gè)問題;

我們可以打開我們的Cotroller在接口上可以看到凡是帶有Shiro注解的,都是需要有相對(duì)應(yīng)的權(quán)限才可以訪問的:

重新加載權(quán)限

那,問題就來了,我們?nèi)绾螌⒆⒔庵械臋?quán)限表達(dá)式(employee:edit)存入到數(shù)據(jù)庫(kù)中呢?

我們?cè)谥暗牟僮髦?,是手?dòng)的將表達(dá)式復(fù)制粘貼到數(shù)據(jù)庫(kù)中,也就是手動(dòng)添加進(jìn)去的,那你想一下,如果需要添加非常多的權(quán)限,我們還依然用手動(dòng)的方式,顯然非常麻煩!

那我們能不能想一種辦法,就是讓用戶一點(diǎn)擊或進(jìn)入這個(gè)接口執(zhí)行一個(gè)方法馬上讓它把所有Cotroller中的權(quán)限表達(dá)式給全部拿出來存入到數(shù)據(jù)庫(kù)中;

能不能做到呢?

答案是可以的!

我們?cè)陧?yè)面上有一個(gè)功能是重新加載權(quán)限,這個(gè)意思就是我們點(diǎn)擊后,你加下來的編碼,給某給接口添加某項(xiàng)權(quán)限的時(shí)候,就會(huì)幫你把所有Cotrolle中的新添加的權(quán)限重新的保存到數(shù)據(jù)庫(kù)中;

這個(gè)按鈕就是一個(gè)Url,點(diǎn)擊后就進(jìn)入到了我們?cè)贑otroller編寫的接口方法中:

接下來,我們就來看下這個(gè)reload接口是如何編寫的:

中間的部分就是獲取權(quán)限表達(dá)式,畫箭頭的是調(diào)用了接j口執(zhí)行的Sql保存操作也就是insert;

此次的接口是對(duì)象保存的方式,接口的具體編寫也非常簡(jiǎn)單,其實(shí)就跟用戶注冊(cè)一樣,將name(權(quán)限名稱)resource(表達(dá)式)作為插入字段即可;

然后在方面結(jié)尾調(diào)用接口,需要傳入一個(gè)對(duì)象,這個(gè)對(duì)象(Permisssion p )就是我們存進(jìn)去的權(quán)限名稱以及表達(dá)式對(duì)象;

具體Sql語句編寫方式:

insert into permission (name,resource) values("permissionName","PermissionResource");

編寫自定義注解來獲取權(quán)限昵稱

我們?cè)趓eload接口中,拿到的僅僅都是表達(dá)式,和獲取Requesmapping,但是我們?cè)跀?shù)據(jù)庫(kù)中有一列是權(quán)限名稱,因?yàn)楣饪勘磉_(dá)式并非知道它的中文意思,所以我們需要自定義注解,從而獲取注解內(nèi)部的中文詮釋;

我們可以看到,這個(gè)注解是會(huì)報(bào)錯(cuò)的,因?yàn)檫@個(gè)注解并不是spring或java內(nèi)置的,更不是第三方依賴的jar包,而是需要我們自定義,所以,自定義注解名字可以隨便起,但是一定要有意義;

我們來看看自定義注解是如何創(chuàng)建的;

1.編寫好自己的注解

就按照上圖的例子我起的名字是@PermissionName;

2.創(chuàng)建一個(gè)注解在realm路徑下(根據(jù)公司項(xiàng)目的結(jié)構(gòu)定義)

注意,Kind:一定選擇Annotation(自定義注解);Name可以隨便起,但是一定要有意義,我這里直接叫PermissionName就好了;

我這里就把注解創(chuàng)建在realm目錄下,因?yàn)楫吘惯@個(gè)也是Shiro的一部分,也可以將它放入到工具包下也可以,根據(jù)公司的項(xiàng)目結(jié)構(gòu)來,如果這是一個(gè)新加入的功能,推薦放入realm包下,并在內(nèi)打上注解介紹;

3.編寫自定義注解類

該注解僅僅獲取權(quán)限名稱使用,以上結(jié)構(gòu)寫死即可;

解決重復(fù)插入問題(去重)

編寫完成后,我們開始進(jìn)入測(cè)試,我們來看看是否可以執(zhí)行成功,將權(quán)限名稱以及表達(dá)式保存進(jìn)數(shù)據(jù)庫(kù)中:

執(zhí)行成功,以及加載了全部的權(quán)限列表,并且都保存至數(shù)據(jù)庫(kù)中;

但是問題來了,如果我們?cè)俅吸c(diǎn)擊加載權(quán)限列表會(huì)怎么樣?

我們發(fā)現(xiàn),重復(fù)添加了,這種情況在實(shí)際開發(fā)當(dāng)中是絕對(duì)不允許的,如何解決呢?

去重操作

我們需要在PermissionController類中第0步,再添加一個(gè)功能,就是去重;

這個(gè)時(shí)候,我們需要去調(diào)用接口去數(shù)據(jù)庫(kù)中查詢一下,看看是否有重復(fù),如果重復(fù),我們就跳過,如果沒重復(fù),我們就保存進(jìn)來;

1.我們編寫獲取所有員工權(quán)限的接口

/**
獲取所有權(quán)限表達(dá)式
*/
List<String>getAllResources();

2.編寫Sql

select resource From permission; 

permission就是表,resource是其中的列(權(quán)限表達(dá)式);我們僅需獲取這一個(gè)列即可

3.編寫實(shí)現(xiàn)類

實(shí)現(xiàn)類就非常簡(jiǎn)單,掉Mapper層,執(zhí)行sql,用集合接收,數(shù)據(jù)接收到后,直接retrun過去即可;

4.在Controller類中調(diào)用

畫箭頭就是新加入的內(nèi)容,根據(jù)以上指引編寫即可;

總結(jié)

以上所述是小編給大家介紹的Spring與Shiro整合及加載權(quán)限表達(dá)式問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Java判斷變量是否為空問題的方法總結(jié)

    Java判斷變量是否為空問題的方法總結(jié)

    項(xiàng)目中經(jīng)常遇到對(duì)象判空,下面這篇文章主要給大家介紹了關(guān)于Java判斷變量是否為空問題的方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • MyBatis Generator介紹及使用方法

    MyBatis Generator介紹及使用方法

    MyBatis Generator 是一款針對(duì) MyBatis 或 iBATIS 設(shè)計(jì)的代碼生成器,由 MyBatis 官方提供,這篇文章主要介紹了MyBatis Generator介紹及使用方法,需要的朋友可以參考下
    2023-06-06
  • Java CompletableFuture的使用詳解

    Java CompletableFuture的使用詳解

    這篇文章主要介紹了Java CompletableFuture的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Spring更簡(jiǎn)單的存儲(chǔ)方式與獲取方式詳解

    Spring更簡(jiǎn)單的存儲(chǔ)方式與獲取方式詳解

    Spring是一個(gè)輕量級(jí)的IoC和AOP容器框架,是為Java應(yīng)用程序提供基礎(chǔ)性服務(wù)的一套框架,目的是用于簡(jiǎn)化企業(yè)應(yīng)用程序的開發(fā),它使得開發(fā)者只需要關(guān)心業(yè)務(wù)需求,下面這篇文章主要給大家介紹了關(guān)于Spring更簡(jiǎn)單的存儲(chǔ)方式與獲取方式的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 詳解Java實(shí)現(xiàn)多線程的三種方式

    詳解Java實(shí)現(xiàn)多線程的三種方式

    線程(英語:thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。本文總結(jié)了Java多線程是三種實(shí)現(xiàn)方式,需要的可以參考一下
    2022-03-03
  • Mybatis中使用updateBatch進(jìn)行批量更新

    Mybatis中使用updateBatch進(jìn)行批量更新

    這篇文章主要介紹了Mybatis中使用updateBatch進(jìn)行批量更新的相關(guān)資料,有逐條更新,sql批量更新等,具體實(shí)例代碼大家參考下本文
    2018-04-04
  • SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼

    SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼

    這篇文章主要介紹了SpringMVC+Spring+Mybatis實(shí)現(xiàn)支付寶支付功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • linux中nohup?java?-jar啟動(dòng)java項(xiàng)目的步驟

    linux中nohup?java?-jar啟動(dòng)java項(xiàng)目的步驟

    nohup是一個(gè)Unix和Linux命令,用于運(yùn)行關(guān)閉時(shí)不會(huì)被終止的進(jìn)程,這篇文章主要給大家介紹了關(guān)于linux中nohup?java?-jar啟動(dòng)java項(xiàng)目的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 詳解Spring中Bean的作用域與生命周期

    詳解Spring中Bean的作用域與生命周期

    Spring作為當(dāng)前Java最流行、最強(qiáng)大的輕量級(jí)框架,受到了程序員的熱烈歡迎。準(zhǔn)確的了解Spring?Bean的作用域與生命周期是非常必要的。這篇文章將問你詳解一下Bean的作用域與生命周期,需要的可以參考一下
    2021-12-12
  • SimpleDateFormat格式化日期問題

    SimpleDateFormat格式化日期問題

    這篇文章主要介紹了SimpleDateFormat格式化日期問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

德令哈市| 庐江县| 宾阳县| 台湾省| 黄浦区| 房山区| 青冈县| 恩施市| 南江县| 佛教| 永泰县| 新兴县| 错那县| 岫岩| 长宁区| 通河县| 黄骅市| 河北省| 周宁县| 梁平县| 隆子县| 江西省| 周宁县| 宁阳县| 合阳县| 南靖县| 新竹县| 西吉县| 石棉县| 恩施市| 海口市| 滨州市| 师宗县| 江源县| 阳原县| 霍邱县| 永济市| 株洲县| 康平县| 昌吉市| 肥东县|