![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第1頁(yè)](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b1.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第2頁(yè)](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b2.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第3頁(yè)](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b3.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第4頁(yè)](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b4.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第5頁(yè)](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Struts2器實(shí)現(xiàn)細(xì)顆粒權(quán)限控制1:在util 包下創(chuàng)建注解的類AnnoionLimit,用來(lái)控制在 Action 類中的方法例如:在Action 的方法上定義:AnnoionLimit(mid=an,=am)2:在util 包下創(chuàng)建器ErrorAndLimiterceptor,代碼如下:package cn.elec.util;import java.lang.reflect.Method; import java.util.Hashtable; import java.util.Iterator; import java.util.List;import java.util.Mntry;
2、import javax.servlet.http.HttpServletRequest;importmons.logging.Log;importmons.logging.LogFactory;import.apache.struts2.StrutsSics;import.springframework.web.context.WebApplicationContext;import.springframework.web.context.support.WebApplicationContextUtils;import cn.elec.ElecRolePopedom;import cn.e
3、lec.ElecUser;import cn.elec.service.IElecRoleService;import com.opensymphony.xwork2.ActionInvocation;package cn.elec.util;import java.lang.annoion.Retention; import java.lang.anno ion.RetentionPolicy;/* 自定義注解*/被這個(gè)注解修飾的注解,利用反射,將其他的注解出來(lái)Retention(RetentionPolicy.RUNTIME) public erface AnnoionLimit Stri
4、ng mid();/子模塊模塊名稱 String(); /父模塊操作名稱import com.opensymphony.xwork2.erceptor.MethodFiltererceptor;SuppressWarnings(serial)public class ErrorAndLimiterceptor extends MethodFiltererceptor public void init() /* 過(guò)濾器過(guò)濾url(.do和.jsp)器url(.do)*actioninvocation.invoke():調(diào)用struts2的Action的方法,并返回String類型的對(duì)應(yīng)的返回值*
5、/public Stringntercept(ActionInvocation actioninvocation) /把自定義錯(cuò)誤信息 放置到request中HttpServletRequest request = (HttpServletRequest)actioninvocation.getInvocationContext().get(StrutsStry /獲取請(qǐng)求的action對(duì)象ics.HTTP_REQUEST);Object action = actioninvocation.getAction();/獲取請(qǐng)求的方法的名稱String methodName = actioninv
6、ocation.getProxy().getMethod();/獲取action中的方法的封裝類(action中的方法沒有參數(shù))Method method = action.getClass().getMethod(methodName, null);String result = null; / Action的返回值/在完成跳轉(zhuǎn)Action之前完成細(xì)顆粒權(quán)限控制,控制Action的每個(gè)方法/檢查注解,是否可以操作權(quán)限的URLflag = isCheckLimit(request,method);if(flag)/ 運(yùn)行被的Action,期間如果發(fā)生異常會(huì)被catch住result = act
7、ioninvocation.invoke();elserequest.setribute(errorMsg, 對(duì)不起!您沒限操作此功能!);return errorMsg;return result;catch (Exception e) /*處理異常*/String errorMsg = 出現(xiàn)錯(cuò)誤信息,請(qǐng)查看日志!;/通過(guò)instanceof判斷到底是什么異常類型if (e instanceof RuntimeException) /未知的運(yùn)行時(shí)異常RuntimeException re = (RuntimeException)/re.prStackTrace();errorMsg = re
8、.getMessage().trim();/*發(fā)送錯(cuò)誤消息到頁(yè)面*/request.setribute(errorMsg, errorMsg);e;/* log4j*/Log log =日志LogFactory.getLog(actioninvocation.getAction().getClass(); log.error(errorMsg, e);return errorMsg;.end of catch/publicvoid destroy() /*驗(yàn)證細(xì)顆粒權(quán)限控制*/publicmethod) isCheckLimit(HttpServletRequest request, Meth
9、odif(method = null) return false;/獲取當(dāng)前的登陸用戶 ElecUser elecUser =(ElecUser)request.getSes().getribute(globle_user);if(elecUser = null) return false;/獲取當(dāng)前登陸用戶的角色(一個(gè)用戶可以對(duì)應(yīng)多個(gè)角色) Hashtable ht =(Hashtable)request.getSes().getribute(globle role); if(ht = null)return false;/處理注解,判斷方法上是否存在注解(注解的名稱為:Anno/* 例如:
10、ionLimit)* AnnoionLimit(mid=aa, public String home()*/=0)isAnnoionPresent =method.isAnnoionPresent(AnnoionLimit.class);/不存在注解(此時(shí)不能操作該方法)if(!isAnnoionPresent)return false;/存在注解(調(diào)用注解)Annomethod.getAnnoionLimit limit =ion(AnnoionLimit.class);/獲取注解上的值String mid = limit.mid(); /權(quán)限子模塊名稱(); /權(quán)限父操作名稱String=
11、 limit./*如果登陸用戶的角色id+注解上的Anno* 在elec_role_popedom表中存在ionLimit(mid=aa,flag=true,此時(shí)可以=0)Action的方法;* 在elec_role_popedom表中不存在flag=false,此時(shí)不能Action的方法;*/flag = false;/器中加載spring容器,從而獲取Service類,使用Service類查詢對(duì)應(yīng)的用戶信息WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(request.getSe
12、ssio n().getServletContext();IElecRoleService elecRoleService =(IElecRoleService)wac.getBean(IElecRoleServi/遍歷角色I(xiàn)DERVICE_NAME);3:在 ElecRoleService 類下創(chuàng)建新增方法,使用角色 ID,權(quán)限 code,父級(jí)權(quán)限code 作為聯(lián)合主鍵查詢角色權(quán)限表,判斷當(dāng)前用戶是否可以該操作。/*使用角色I(xiàn)D,子權(quán)限,父權(quán)限,查詢角色權(quán)限表的所有數(shù)據(jù)*/publicfindRolePopedomByID(String roleID,String mid,String) /
13、組織查詢條件String condition = ;List paramsList = new ArrayList();/角色I(xiàn)Dif(StringUtils.isNotBl(roleID) condition += and o.roleID = ?; paramsList.add(roleID);/子權(quán)限名稱if(StringUtils.isNotBl(mid) condition += and o.mid = ?; paramsList.add(mid);/父權(quán)限名稱if(StringUtils.isNotBl() condition += and o.= ?; paramsList.ad
14、d();Object params = paramsList.toArray();/查詢對(duì)應(yīng)的角色權(quán)限信息LisecRolePopedom list =if(ht!=null & ht.size()0) for(IteratorEntry ite =ht.entrySet().iterator();ite.hasNext();)Entry entry = ite.next();/獲取角色I(xiàn)DString roleID = entry.getKey();flag = elecRoleService.findRolePopedomByID(roleID, mid,);if(flag)break;return flag;4:在struts.xml 中定義自定義器:放置在 package 下5:在Action 的方法上定義:AnnoionLimit(mid=an,=am)public String hom
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)非標(biāo)零件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)硫酸鎂數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)喂料閥數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 廚房金屬器具的環(huán)保與節(jié)能技術(shù)考核試卷
- 娃娃玩具企業(yè)文化傳承與創(chuàng)新策略實(shí)施考核試卷
- 寵物策劃活動(dòng)執(zhí)行服務(wù)考核試卷
- 2025-2030年戶外羽毛球場(chǎng)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年城市天際線動(dòng)態(tài)照明系統(tǒng)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年塑木生態(tài)浮床行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 農(nóng)機(jī)租賃市場(chǎng)國(guó)際標(biāo)準(zhǔn)對(duì)接考核試卷
- 城市基礎(chǔ)設(shè)施修繕工程的重點(diǎn)與應(yīng)對(duì)措施
- 油氣勘探風(fēng)險(xiǎn)控制-洞察分析
- GB 12710-2024焦化安全規(guī)范
- 2022年中考化學(xué)模擬卷1(南京專用)
- 醫(yī)療機(jī)構(gòu)質(zhì)量管理指南
- 【??途W(wǎng)】2024秋季校園招聘白皮書
- 2024-2025銀行對(duì)公業(yè)務(wù)場(chǎng)景金融創(chuàng)新報(bào)告
- 2025屆鄭州市高三一診考試英語(yǔ)試卷含解析
- 《我國(guó)個(gè)人所得稅制下稅收征管問(wèn)題研究》
- 建筑工程三通一平技術(shù)方案
- 腫瘤中醫(yī)治療及調(diào)養(yǎng)
評(píng)論
0/150
提交評(píng)論