如何加載權(quán)限表達(dá)式
成都創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)與策劃設(shè)計,宜興網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:宜興等地區(qū)。宜興做網(wǎng)站價格咨詢:18982081108
我們在上章內(nèi)容中畫了一張圖,里面有三個分項,用戶 角色 權(quán)限;
那么接下來我們就要思考一個問題了,這三張表中的數(shù)據(jù)要從何而來呢?
用戶表
首先先看用戶表,用戶表的數(shù)據(jù)庫是從用戶注冊而來;
角色
角色的話肯定是我們手動去創(chuàng)建出來,但是我們在創(chuàng)建角色之前呢?是不是需要先有權(quán)限后才能去創(chuàng)建角色呢?因為角色是依賴于權(quán)限,只要先有了權(quán)限,我們就可以講它們歸類,分配給我們某一個角色;
所以我們的突破口就是,權(quán)限該如何去加載這個問題;
我們可以打開我們的Cotroller在接口上可以看到凡是帶有Shiro注解的,都是需要有相對應(yīng)的權(quán)限才可以訪問的:
重新加載權(quán)限
那,問題就來了,我們?nèi)绾螌⒆⒔庵械臋?quán)限表達(dá)式(employee:edit)存入到數(shù)據(jù)庫中呢?
我們在之前的操作中,是手動的將表達(dá)式復(fù)制粘貼到數(shù)據(jù)庫中,也就是手動添加進(jìn)去的,那你想一下,如果需要添加非常多的權(quán)限,我們還依然用手動的方式,顯然非常麻煩!
那我們能不能想一種辦法,就是讓用戶一點(diǎn)擊或進(jìn)入這個接口執(zhí)行一個方法馬上讓它把所有Cotroller中的權(quán)限表達(dá)式給全部拿出來存入到數(shù)據(jù)庫中;
能不能做到呢?
答案是可以的!
我們在頁面上有一個功能是重新加載權(quán)限,這個意思就是我們點(diǎn)擊后,你加下來的編碼,給某給接口添加某項權(quán)限的時候,就會幫你把所有Cotrolle中的新添加的權(quán)限重新的保存到數(shù)據(jù)庫中;
這個按鈕就是一個Url,點(diǎn)擊后就進(jìn)入到了我們在Cotroller編寫的接口方法中:
接下來,我們就來看下這個reload接口是如何編寫的:
中間的部分就是獲取權(quán)限表達(dá)式,畫箭頭的是調(diào)用了接j口執(zhí)行的Sql保存操作也就是insert;
此次的接口是對象保存的方式,接口的具體編寫也非常簡單,其實(shí)就跟用戶注冊一樣,將name(權(quán)限名稱)resource(表達(dá)式)作為插入字段即可;
然后在方面結(jié)尾調(diào)用接口,需要傳入一個對象,這個對象(Permisssion p )就是我們存進(jìn)去的權(quán)限名稱以及表達(dá)式對象;
具體Sql語句編寫方式:
insert into permission (name,resource) values("permissionName","PermissionResource");
編寫自定義注解來獲取權(quán)限昵稱
我們在reload接口中,拿到的僅僅都是表達(dá)式,和獲取Requesmapping,但是我們在數(shù)據(jù)庫中有一列是權(quán)限名稱,因為光靠表達(dá)式并非知道它的中文意思,所以我們需要自定義注解,從而獲取注解內(nèi)部的中文詮釋;
我們可以看到,這個注解是會報錯的,因為這個注解并不是spring或java內(nèi)置的,更不是第三方依賴的jar包,而是需要我們自定義,所以,自定義注解名字可以隨便起,但是一定要有意義;
我們來看看自定義注解是如何創(chuàng)建的;
1.編寫好自己的注解
就按照上圖的例子我起的名字是@PermissionName;
2.創(chuàng)建一個注解在realm路徑下(根據(jù)公司項目的結(jié)構(gòu)定義)
注意,Kind:一定選擇Annotation(自定義注解);Name可以隨便起,但是一定要有意義,我這里直接叫PermissionName就好了;
我這里就把注解創(chuàng)建在realm目錄下,因為畢竟這個也是Shiro的一部分,也可以將它放入到工具包下也可以,根據(jù)公司的項目結(jié)構(gòu)來,如果這是一個新加入的功能,推薦放入realm包下,并在內(nèi)打上注解介紹;
3.編寫自定義注解類
該注解僅僅獲取權(quán)限名稱使用,以上結(jié)構(gòu)寫死即可;
解決重復(fù)插入問題(去重)
編寫完成后,我們開始進(jìn)入測試,我們來看看是否可以執(zhí)行成功,將權(quán)限名稱以及表達(dá)式保存進(jìn)數(shù)據(jù)庫中:
執(zhí)行成功,以及加載了全部的權(quán)限列表,并且都保存至數(shù)據(jù)庫中;
但是問題來了,如果我們再次點(diǎn)擊加載權(quán)限列表會怎么樣?
我們發(fā)現(xiàn),重復(fù)添加了,這種情況在實(shí)際開發(fā)當(dāng)中是絕對不允許的,如何解決呢?
去重操作
我們需要在PermissionController類中第0步,再添加一個功能,就是去重;
這個時候,我們需要去調(diào)用接口去數(shù)據(jù)庫中查詢一下,看看是否有重復(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á)式);我們僅需獲取這一個列即可
3.編寫實(shí)現(xiàn)類
實(shí)現(xiàn)類就非常簡單,掉Mapper層,執(zhí)行sql,用集合接收,數(shù)據(jù)接收到后,直接retrun過去即可;
4.在Controller類中調(diào)用
畫箭頭就是新加入的內(nèi)容,根據(jù)以上指引編寫即可;
總結(jié)
以上所述是小編給大家介紹的Spring與Shiro整合及加載權(quán)限表達(dá)式問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
當(dāng)前題目:Spring與Shiro整合及加載權(quán)限表達(dá)式問題
當(dāng)前URL:http://vcdvsql.cn/article38/pesjpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)