![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第1頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b1.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第2頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b2.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第3頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b3.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第4頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b4.gif)
![struts2的攔截器實(shí)現(xiàn)細(xì)顆粒度權(quán)限控制_第5頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Struts2器實(shí)現(xiàn)細(xì)顆粒權(quán)限控制1:在util 包下創(chuàng)建注解的類AnnoionLimit,用來控制在 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è)注解修飾的注解,利用反射,將其他的注解出來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() /* 過濾器過濾url(.do和.jsp)器url(.do)*actioninvocation.invoke():調(diào)用struts2的Action的方法,并返回String類型的對應(yīng)的返回值*
5、/public Stringntercept(ActionInvocation actioninvocation) /把自定義錯(cuò)誤信息 放置到request中HttpServletRequest request = (HttpServletRequest)actioninvocation.getInvocationContext().get(StrutsStry /獲取請求的action對象ics.HTTP_REQUEST);Object action = actioninvocation.getAction();/獲取請求的方法的名稱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, 對不起!您沒限操作此功能!);return errorMsg;return result;catch (Exception e) /*處理異常*/String errorMsg = 出現(xiàn)錯(cuò)誤信息,請查看日志!;/通過instanceof判斷到底是什么異常類型if (e instanceof RuntimeException) /未知的運(yùn)行時(shí)異常RuntimeException re = (RuntimeException)/re.prStackTrace();errorMsg = re
8、.getMessage().trim();/*發(fā)送錯(cuò)誤消息到頁面*/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è)用戶可以對應(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類查詢對應(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,父級權(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();/查詢對應(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年勞動(dòng)爭議一次性賠償協(xié)議書標(biāo)準(zhǔn)格式
- 2025年共創(chuàng)未來戰(zhàn)略性框架協(xié)議樣本
- 2025年標(biāo)準(zhǔn)服裝模特合作合同范本
- 2025年兼職工作人員雇傭合同模板
- 2025年冬季旅行社聯(lián)營協(xié)議
- 2025年企業(yè)增股擴(kuò)資協(xié)議
- 2025年制造業(yè)產(chǎn)品交貨時(shí)間協(xié)議導(dǎo)則
- 2025年交通道路標(biāo)線施劃任務(wù)合同
- 2025年共同投資水資源保護(hù)項(xiàng)目協(xié)議
- 2025年公共照明亮化項(xiàng)目合同書
- 學(xué)校安全隱患排查治理工作臺(tái)賬
- GB/T 8151.13-2012鋅精礦化學(xué)分析方法第13部分:鍺量的測定氫化物發(fā)生-原子熒光光譜法和苯芴酮分光光度法
- 2023年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(英語)試題庫含答案解析
- GB/T 39274-2020公共安全視頻監(jiān)控?cái)?shù)字視音頻編解碼技術(shù)測試規(guī)范
- GB/T 23800-2009有機(jī)熱載體熱穩(wěn)定性測定法
- 犯罪學(xué)全套教學(xué)課件
- T-SFSF 000012-2021 食品生產(chǎn)企業(yè)有害生物風(fēng)險(xiǎn)管理指南
- 2023年上海市閔行區(qū)精神衛(wèi)生中心醫(yī)護(hù)人員招聘筆試題庫及答案解析
- 水庫工程施工組織設(shè)計(jì)
- 售電公司與電力用戶委托交易代理合同
- 基礎(chǔ)護(hù)理學(xué)試題及答案(各章節(jié))-基礎(chǔ)護(hù)理學(xué)第四版試題及答案
評論
0/150
提交評論