日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

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

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

1.自定義權(quá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.啟動服務(wù)器,測試是否攔截到操作信息

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

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

獲取所有資源信息

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

//由直接在攔截器里面進行資源查詢的時候,每次都需要查詢,這樣會使得程序的效率很低, //因此在這里使用監(jiā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)系靠角色維護,即員工->角色->資源
獲取登陸用戶的所有資源
注:session中的登陸用戶數(shù)據(jù)中如果未對關(guān)聯(lián)數(shù)據(jù)進行初始化無法直接獲取

//在登錄成功的時候,查詢該用戶的所有權(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會自動的裝配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);//由直接在攔截器里面進行資源查詢的時候,每次都需要查詢,這樣會使得程序的效率很低,//因此在這里使用監(jiā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("-----==-----");//在登錄的時候?qū)⒂脩舻臋?quán)限查詢出來提高程序的效率if(em.getResAll().contains(allName)){return invocation.invoke();}throw new AppException("對不起你沒有訪問權(quán)限!");} }

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

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

public class AllResLoadListener implements ServletContextListener

2.監(jiān)聽器初始化時,獲取全資源信息,并將其加載到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)聽器

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

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

三、總結(jié)

這里主要是通過java監(jiān)聽器來實現(xiàn)權(quán)限的控制和對資源的啟動的優(yōu)化。

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

總結(jié)

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

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