日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh)

發(fā)布時(shí)間:2025/3/20 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、權(quán)限控制系統(tǒng)

權(quán)限控制系統(tǒng)即用戶登錄后,如果操作了不能訪問(wèn)的操作,系統(tǒng)將其攔截。
權(quán)限控制系統(tǒng)設(shè)計(jì)需求:

  • 系統(tǒng)功能并不是所有功能都需要被控制,例如登錄功能無(wú)需校驗(yàn)
    設(shè)計(jì)方案:資源中沒(méi)有出現(xiàn)的功能將不被過(guò)濾
  • 系統(tǒng)功能中具有訪問(wèn)控制權(quán)限的一定出現(xiàn)在資源定義數(shù)據(jù)中。
  • 用戶每次訪問(wèn)某個(gè)功能時(shí),必須先進(jìn)行校驗(yàn),使用攔截器或AOP完成此功能。

1.自定義權(quán)限校驗(yàn)攔截器AuthInterceptor

public class AuthInterceptor extends AbstractInterceptor

2.獲取當(dāng)前被攔截的操作信息

String actionName = invocation.getProxy().getAction().getClass().getName(); String methodName = invocation.getProxy().getMethod(); String allName = actionName + "." + methodName;

3.啟動(dòng)服務(wù)器,測(cè)試是否攔截到操作信息

4.獲取所有的資源信息
首先注入ResourceEbi,使用struts2的自動(dòng)裝配模式

private ResEbi resEbi;//struts會(huì)自動(dòng)的裝配public void setResEbi(ResEbi resEbi) {this.resEbi = resEbi;}

獲取所有資源信息

檢測(cè)調(diào)用資源是否存在于全資源列表中

//由直接在攔截器里面進(jìn)行資源查詢的時(shí)候,每次都需要查詢,這樣會(huì)使得程序的效率很低, //因此在這里使用監(jiān)聽(tīng)器,在程序加載的時(shí)候就加載好,這樣后面就不會(huì)再進(jìn)行查詢 String allRes = ServletActionContext.getServletContext().getAttribute("allRes").toString(); if(!allRes.contains(allName)){return invocation.invoke(); }

5.根據(jù)用戶登陸數(shù)據(jù),獲取登錄人所具有的資源數(shù)據(jù),其中關(guān)聯(lián)關(guān)系靠角色維護(hù),即員工->角色->資源
獲取登陸用戶的所有資源
注:session中的登陸用戶數(shù)據(jù)中如果未對(duì)關(guān)聯(lián)數(shù)據(jù)進(jìn)行初始化無(wú)法直接獲取

//在登錄成功的時(shí)候,查詢?cè)撚脩舻乃袡?quán)限 List<ResModel> resList = resEbi.getResByEm(loginEm.getUuid()); StringBuilder sbf = new StringBuilder(); for (ResModel rm : resList) {sbf.append(rm.getText());sbf.append(","); }

全部代碼

public class AuthInterceptor extends AbstractInterceptor{private ResEbi resEbi;//struts會(huì)自動(dòng)的裝配public void setResEbi(ResEbi resEbi) {this.resEbi = resEbi;}public String intercept(ActionInvocation invocation) throws Exception {String actionName = invocation.getProxy().getAction().getClass().getName();String methodName = invocation.getProxy().getMethod();String allName = actionName + "." + methodName;System.out.println(allName);//由直接在攔截器里面進(jìn)行資源查詢的時(shí)候,每次都需要查詢,這樣會(huì)使得程序的效率很低,//因此在這里使用監(jiān)聽(tīng)器,在程序加載的時(shí)候就加載好,這樣后面就不會(huì)再進(jìn)行查詢String allRes = ServletActionContext.getServletContext().getAttribute("allRes").toString();if(!allRes.contains(allName)){return invocation.invoke();}EmpModel em = (EmpModel) ActionContext.getContext().getSession().get(EmpModel.EMP_LOGIN_USER_OBJECT_NAME); // System.out.println("-----==-----"); // System.out.println(em.getResAll()); // System.out.println("-----==-----");//在登錄的時(shí)候?qū)⒂脩舻臋?quán)限查詢出來(lái)提高程序的效率if(em.getResAll().contains(allName)){return invocation.invoke();}throw new AppException("對(duì)不起你沒(méi)有訪問(wèn)權(quán)限!");} }

二、全資源獲取優(yōu)化

系統(tǒng)中每個(gè)用戶的每個(gè)操作均需要依賴攔截器進(jìn)行校驗(yàn),其中的功能如果性能過(guò)低將使整體系統(tǒng)性能下降。對(duì)其中的數(shù)據(jù)獲取進(jìn)行優(yōu)化。
由于權(quán)限校驗(yàn)時(shí),每次需要判定調(diào)用資源是否存在于所有資源列表中,以此判定當(dāng)前操作是否需要權(quán)限攔截,所以需要將該數(shù)據(jù)的獲取進(jìn)行優(yōu)化。
將此類(lèi)數(shù)據(jù)的共享范圍擴(kuò)大至應(yīng)用程序范圍,將該數(shù)據(jù)獲取后,放置在ServletContext范圍內(nèi)。
1.開(kāi)發(fā)Web監(jiān)聽(tīng)器

public class AllResLoadListener implements ServletContextListener

2.監(jiān)聽(tīng)器初始化時(shí),獲取全資源信息,并將其加載到ServletContext范圍內(nèi)。為后期判定方便,將數(shù)據(jù)初始化為字符串信息,方便查詢,減少集合迭代次數(shù)。

public void contextInitialized(ServletContextEvent event) {ServletContext sc = event.getServletContext();WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sc);ResEbi resEbi = (ResEbi) ctx.getBean("resEbi");List<ResModel> resList = resEbi.getAll();StringBuilder sbf = new StringBuilder();for(ResModel temp :resList){sbf.append(temp.getText());sbf.append(",");}//放入sc中sc.setAttribute("allRes", sbf.toString());}

3.配置Web監(jiān)聽(tīng)器

4.在權(quán)限攔截器中獲取資源,斷開(kāi)原始獲取資源方式

String allRes = ServletActionContext.getServletContext().getAttribute("allRes").toString(); if(!allRes.contains(allName)){return invocation.invoke(); }

三、總結(jié)

這里主要是通過(guò)java監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)權(quán)限的控制和對(duì)資源的啟動(dòng)的優(yōu)化。

如果想獲取更多源碼或者視頻教程,歡迎關(guān)注我的微信公眾號(hào) 好好學(xué)java,在公眾號(hào)里,回復(fù):java基礎(chǔ)、html5、javaEE基礎(chǔ)、struts2、spring、redis、luncene、oracle等,將可獲得以上的優(yōu)質(zhì)視頻教程及源碼。

總結(jié)

以上是生活随笔為你收集整理的【struts2+hibernate+spring项目实战】java监听器实现权限控制系统和资源获取优化(ssh)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣在线观看一区 | 欧美日韩色视频 | 国产1区2区3区4区 | 一区二区三区黄色片 | 九九亚洲精品 | 日韩人妻精品一区二区三区 | 不卡一区在线 | 国产免费久久久 | 伊人国产在线 | 福利视频精品 | 天堂一区在线 | аⅴ资源中文在线天堂 | 日韩av无码久久 | 精品一区二区在线观看视频 | 亚洲一区二区综合 | 大尺度做爰无遮挡露器官 | 中文字幕视频在线播放 | www夜夜操 | 午夜精品久久久久久久久久久久久 | 欧美日韩一区二区在线视频 | 中文字幕在线播放不卡 | 欧美日韩在线影院 | 波多野结衣亚洲视频 | 中国女人内谢69xxxx免费视频 | 超碰三级 | 天天干夜夜爽 | 91国在线观看 | 一区二区中文字幕 | 特级西西444www大胆免费看 | 香蕉亚洲 | 在线天堂中文字幕 | 日韩视频免费在线观看 | 成人一级大片 | 国产成人免费在线 | 精东传媒在线观看 | 欧美日韩一卡二卡三卡 | 亚洲欧美综合精品久久成人 | 亚洲一二三在线 | 国产色吧| 久久人人爽人人爽人人片av免费 | 中文字幕国产精品 | 麻豆传媒在线免费 | 8090理论片午夜理伦片 | www.超碰在线观看 | 国产尤物av| 国产精品麻豆成人av电影艾秋 | 91九色视频 | 亚洲成人无码久久 | 欧美日韩精品区 | 7777久久亚洲中文字幕 | 男人天堂av电影 | 欧美视频直播网站 | 亚色中文 | 成人免费做受小说 | 一区二区三区久久 | 黑人vs亚洲人在线播放 | 国产精品久久久久久久久久久久久 | 蜜桃tv一区二区三区 | 草草视频在线观看 | 免费成人高清视频 | 日日天天 | 在线观看a级片 | 亚洲欧美日韩精品一区 | 小毛片网站 | 淫片一级国产 | www.激情五月 | 污网在线看 | 免费在线观看日韩 | 国产精品久久久午夜夜伦鲁鲁 | 人妻丰满熟妇av无码区hd | 日韩欧美在线一区二区 | 已婚少妇美妙人妻系列 | 涩涩视频在线免费看 | 国产成人精品一区二区三区 | 日本中出视频 | 欧美极品jizzhd欧美仙踪林 | 黄色福利片 | 成人动漫免费观看 | 色婷婷色综合 | 申鹤乳液狂飙 | 欧美色图自拍 | 欧美亚洲综合视频 | 性色av一区二区 | 久久成人一区 | 国产精品人成在线观看免费 | 国产欧美日韩综合精品 | 成人片在线播放 | 天天色天天插 | 国产成年人网站 | 91精品国产闺蜜国产在线闺蜜 | 日韩av片在线播放 | 亚洲一区欧洲二区 | www日本高清| 熟妇毛片 | 成人国产精品久久久网站 | 特级淫片裸体免费看 | 国产精品色| 午夜久久久久久久 | youjizzxxxxx |