下載本文檔
版權(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)建注解的類AnnotationLimit,用來(lái)控制在Action類中的方法例如:在Action的方法上定義:AnnotationLimit(mid=an,pid=am)package cn.itcast.elec.util;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;/* * 自定義注解 */被這個(gè)注解修飾的注解,利用反射,將其他的注解讀取出來(lái)Retention(RetentionPolicy.RUNTIME)publ
2、ic interface AnnotationLimit String mid(); /子模塊模塊名稱String pid(); /父模塊操作名稱2:在util包下創(chuàng)建攔截器ErrorAndLimitInterceptor,代碼如下:package cn.itcast.elec.util;import java.lang.reflect.Method;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map.Entry;import javax.servlet.
3、http.HttpServletRequest;import mons.logging.Log;import mons.logging.LogFactory;import org.apache.struts2.StrutsStatics;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import cn.itcast.elec.domain.ElecRolePopedom;i
4、mport cn.itcast.elec.domain.ElecUser;import cn.itcast.elec.service.IElecRoleService;import com.opensymphony.xwork2.ActionInvocation;import erceptor.MethodFilterInterceptor;SuppressWarnings(serial)public class ErrorAndLimitInterceptor extends MethodFilterInterceptor public void init() /* * 過(guò)濾器過(guò)濾url(.
5、do和.jsp) * 攔截器攔截url(.do) * actioninvocation.invoke():調(diào)用struts2的Action的方法,并返回String類型的對(duì)應(yīng)的返回值 */public String doIntercept(ActionInvocation actioninvocation) /把自定義錯(cuò)誤信息 放置到request中HttpServletRequest request = (HttpServletRequest) actioninvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);tr
6、y /獲取請(qǐng)求的action對(duì)象Object action = actioninvocation.getAction();/獲取請(qǐng)求的方法的名稱String methodName = actioninvocation.getProxy().getMethod();/獲取action中的方法的封裝類(action中的方法沒(méi)有參數(shù))Method method = action.getClass().getMethod(methodName, null);String result = null; / Action的返回值 /在完成跳轉(zhuǎn)Action之前完成細(xì)顆粒權(quán)限控制,控制Action的每個(gè)方法/
7、檢查注解,是否可以操作權(quán)限的URLboolean flag = isCheckLimit(request,method);if(flag)/ 運(yùn)行被攔截的Action,期間如果發(fā)生異常會(huì)被catch住 result = actioninvocation.invoke();elserequest.setAttribute(errorMsg, 對(duì)不起!您沒(méi)有權(quán)限操作此功能!);return errorMsg;return result; catch (Exception e) /* * 處理異常 */String errorMsg = 出現(xiàn)錯(cuò)誤信息,請(qǐng)查看日志!;/通過(guò)instanceof判斷到底
8、是什么異常類型 if (e instanceof RuntimeException) /未知的運(yùn)行時(shí)異常 RuntimeException re = (RuntimeException) e;/re.printStackTrace();errorMsg = re.getMessage().trim();/* * 發(fā)送錯(cuò)誤消息到頁(yè)面 */request.setAttribute(errorMsg, errorMsg);/* * log4j記錄日志 */Log log = LogFactory.getLog(actioninvocation.getAction().getClass();log.e
9、rror(errorMsg, e);return errorMsg;/ .end of catch public void destroy() /*驗(yàn)證細(xì)顆粒權(quán)限控制*/public boolean isCheckLimit(HttpServletRequest request, Method method) if(method = null)return false;/獲取當(dāng)前的登陸用戶ElecUser elecUser = (ElecUser)request.getSession().getAttribute(globle_user);if(elecUser = null)return f
10、alse;/獲取當(dāng)前登陸用戶的角色(一個(gè)用戶可以對(duì)應(yīng)多個(gè)角色)Hashtable ht = (Hashtable)request.getSession().getAttribute(globle_role);if(ht = null)return false;/處理注解,判斷方法上是否存在注解(注解的名稱為:AnnotationLimit)/* * 例如: * AnnotationLimit(mid=aa,pid=0) public String home() */boolean isAnnotationPresent = method.isAnnotationPresent(Annotati
11、onLimit.class);/不存在注解(此時(shí)不能操作該方法)if(!isAnnotationPresent)return false;/存在注解(調(diào)用注解)AnnotationLimit limit = method.getAnnotation(AnnotationLimit.class);/獲取注解上的值String mid = limit.mid(); /權(quán)限子模塊名稱String pid = limit.pid(); /權(quán)限父操作名稱/* * 如果登陸用戶的角色id+注解上的AnnotationLimit(mid=aa,pid=0) * * 在elec_role_popedom表中存
12、在 flag=true,此時(shí)可以訪問(wèn)Action的方法; * * 在elec_role_popedom表中不存在 flag=false,此時(shí)不能訪問(wèn)Action的方法; */boolean flag = false;/攔截器中加載spring容器,從而獲取Service類,使用Service類查詢對(duì)應(yīng)的用戶信息WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext();IElecRoleService elecRo
13、leService = (IElecRoleService)wac.getBean(IElecRoleService.SERVICE_NAME);/遍歷角色I(xiàn)Dif(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, pid);if(flag
14、)break;return flag;3:在ElecRoleService類下創(chuàng)建新增方法,使用角色I(xiàn)D,權(quán)限code,父級(jí)權(quán)限code作為聯(lián)合主鍵查詢角色權(quán)限表,判斷當(dāng)前用戶是否可以訪問(wèn)該操作。 /*使用角色I(xiàn)D,子權(quán)限編號(hào),父權(quán)限編號(hào),查詢角色權(quán)限表的所有數(shù)據(jù)*/public boolean findRolePopedomByID(String roleID,String mid,String pid) /組織查詢條件String condition = ;List paramsList = new ArrayList();/角色I(xiàn)Dif(StringUtils.isNotBlank(ro
15、leID)condition += and o.roleID = ?;paramsList.add(roleID);/子權(quán)限名稱if(StringUtils.isNotBlank(mid)condition += and o.mid = ?;paramsList.add(mid);/父權(quán)限名稱if(StringUtils.isNotBlank(pid)condition += and o.pid = ?;paramsList.add(pid);Object params = paramsList.toArray();/查詢對(duì)應(yīng)的角色權(quán)限信息List list = elecRolePopedomDao.findCollectionByConditionNoPage(condition, params, null);boolean flag = false;if(list!=nul
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇科版小學(xué)五年級(jí)下冊(cè)勞動(dòng)與技術(shù)教學(xué)課件10便攜衣架課件
- 幼兒園健康領(lǐng)域教案《會(huì)動(dòng)的關(guān)節(jié)》《運(yùn)動(dòng)中的安全》
- 中考語(yǔ)文二輪專題復(fù)習(xí):文言文比較閱讀答題方法及技巧
- 《 關(guān)于構(gòu)建數(shù)據(jù)基礎(chǔ)制度更好發(fā)揮數(shù)據(jù)要素作用的意見(jiàn)》
- 2022-2023學(xué)年高二物理競(jìng)賽課件:射極輸出器(共集電極放大電路)
- 2024年湖南客運(yùn)資格證應(yīng)用能力考試內(nèi)容是什么
- 2024年遵義客運(yùn)資格證仿真試題
- 2024年長(zhǎng)春客運(yùn)資格證實(shí)踐操作考什么科目
- 2024年佛山道路客運(yùn)輸從業(yè)資格證培訓(xùn)考試資料
- 2024年福建道路客運(yùn)輸從業(yè)資格證考試題答案
- COPD的肺康復(fù)治療PPT課件
- 【最新】八年級(jí)歷史第三單元
- 高中英語(yǔ)單項(xiàng)選擇復(fù)習(xí)精選1000題及答案
- 產(chǎn)品開(kāi)發(fā)與管理經(jīng)典案例娃哈哈(課堂PPT)
- 泌尿外科護(hù)理疑難病例討論
- 免疫分析實(shí)驗(yàn)室作業(yè)指導(dǎo)書(shū)
- 不符合項(xiàng)糾正措施表1
- 領(lǐng)導(dǎo)小組對(duì)食堂人員考核表
- 關(guān)于村級(jí)組織辦公活動(dòng)場(chǎng)所作用發(fā)揮問(wèn)題的調(diào)查分析報(bào)告
- 常見(jiàn)水生生物彩色圖譜正文
- 配管工程規(guī)范電伴熱設(shè)計(jì)導(dǎo)則
評(píng)論
0/150
提交評(píng)論