![struts2的攔截器實現(xiàn)細(xì)顆粒度權(quán)限控制_第1頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b1.gif)
![struts2的攔截器實現(xiàn)細(xì)顆粒度權(quán)限控制_第2頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b2.gif)
![struts2的攔截器實現(xiàn)細(xì)顆粒度權(quán)限控制_第3頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b3.gif)
![struts2的攔截器實現(xiàn)細(xì)顆粒度權(quán)限控制_第4頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b4.gif)
![struts2的攔截器實現(xiàn)細(xì)顆粒度權(quán)限控制_第5頁](http://file4.renrendoc.com/view/2b8ebcf303dd48522a93f01822362a3b/2b8ebcf303dd48522a93f01822362a3b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Struts2器實現(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;/* 自定義注解*/被這個注解修飾的注解,利用反射,將其他的注解出來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) /把自定義錯誤信息 放置到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的每個方法/檢查注解,是否可以操作權(quán)限的URLflag = isCheckLimit(request,method);if(flag)/ 運(yùn)行被的Action,期間如果發(fā)生異常會被catch住result = act
7、ioninvocation.invoke();elserequest.setribute(errorMsg, 對不起!您沒限操作此功能!);return errorMsg;return result;catch (Exception e) /*處理異常*/String errorMsg = 出現(xiàn)錯誤信息,請查看日志!;/通過instanceof判斷到底是什么異常類型if (e instanceof RuntimeException) /未知的運(yùn)行時異常RuntimeException re = (RuntimeException)/re.prStackTrace();errorMsg = re
8、.getMessage().trim();/*發(fā)送錯誤消息到頁面*/request.setribute(errorMsg, errorMsg);e;/* log4j*/Log log =日志LogFactory.getLog(actioninvocation.getAction().getClass(); log.error(errorMsg, e);return errorMsg;.end of catch/publicvoid destroy() /*驗證細(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)前登陸用戶的角色(一個用戶可以對應(yīng)多個角色) 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);/不存在注解(此時不能操作該方法)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,此時可以=0)Action的方法;* 在elec_role_popedom表中不存在flag=false,此時不能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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球電子鎮(zhèn)痛泵行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國正照式CMOS制冷相機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球生活用紙頭膠行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國奧美沙坦酯氫氯噻嗪片行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球帆布繪畫套件行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國防靜電HPL架空地板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球ADAS清洗系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國TGV激光微孔設(shè)備行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國導(dǎo)熱平臺和導(dǎo)熱板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國13C-尿素呼氣測試試劑盒行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2024-2025銀行對公業(yè)務(wù)場景金融創(chuàng)新報告
- 2025屆鄭州市高三一診考試英語試卷含解析
- 《我國個人所得稅制下稅收征管問題研究》
- 腫瘤中醫(yī)治療及調(diào)養(yǎng)
- 組長競選課件教學(xué)課件
- 2022年公務(wù)員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 2024 ESC慢性冠脈綜合征指南解讀(全)
- 北師大版四年級下冊數(shù)學(xué)第一單元測試卷帶答案
- 術(shù)后肺炎預(yù)防和控制專家共識解讀課件
- 中石化高級職稱英語考試
- 小學(xué)五年級英語閱讀理解(帶答案)
評論
0/150
提交評論