国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SSH架構的通用權限管理系統(tǒng)的設計現

2015-10-19 05:46黃斌
電腦知識與技術 2015年20期

黃斌

摘要:隨著Internet技術的不斷發(fā)展,使用基于(B/S)瀏覽器/服務器信息管理平臺在現實中應用也越來越廣泛,J2ee技術的發(fā)展,web系統(tǒng)應用設計與使用越來越復雜,保護web系統(tǒng)資源的合法性,已經成為一個web系統(tǒng)中不可或缺的一部分,使用基于J2ee技術的SSH架構及RBAC模型,借助注解動態(tài)代理等相關技術開發(fā),使得權限管理系統(tǒng)的實現更加靈活,低耦合且通用性良好。

關鍵詞: SSH;注解;動態(tài)代理;權限管理

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)20-0064-02

The Design of the General Rights Management System Based on SSH Framework

HUANG Bin

(East China Institute of Technology, Nanchang 330013, China)

Abstract:With the continuous development of Internet technology, the use of J2ee (B/S) browser / server information management platform is becoming more and more extensive, the development of web technology, J2ee system application design and use more and more complex, protect web system resources, has become an integral part of web system, using SSH technology based on RBAC model, the use of dynamic proxy and other related technology development, so that the management system is more flexible, low coupling and general purpose.

Key words: SSH; annotation; dynamic proxy; authority management

企業(yè)或政府部門,為了便于提高工作效率,不斷推動移動互聯(lián)網的快速發(fā)展,基于SSH架構的java web系統(tǒng)開發(fā)的應用程序開發(fā)越來越廣泛,對不同用戶進行權限控制,并且權限設計的好壞,直接關系系統(tǒng)的安全性[1]。以往的權限管理系統(tǒng),有其局限性,注解技術的出現, 從而避免成千上萬行的配置文件,降低文件可讀性,更專注于代碼的編寫,動態(tài)代理是GOF設計模式中的一種,其作用就是和業(yè)務代碼不耦合在一起,并將其從業(yè)務邏輯中分離出去,將這些核心業(yè)務所共同的邏輯代碼進行封裝,比如權限管理,日志,事務管理。

1 方案設計

1.1權限模型設計

權限管理模塊只是實現系統(tǒng)中控制用戶對功能的使用情況,在web系統(tǒng)中,使用的每一個功能都對應的URL,對功能的控制就是對URL的訪問控制,基于角色權限管理模塊就是在用戶和權限之間設置了一個新的實體即角色,每一個角色授予對應的功能或URL的集合,角色作為中間媒介把用戶集合和權限集合聯(lián)系起來,用戶的權限就是用戶所有角色的權限的集合,通過系統(tǒng)分配給用戶相應的角色,實現對用戶權限的管理[2]。

1.2 SSH框架系統(tǒng)搭建

SSH開發(fā)框架是指由struts2+hibernate3+spring3.0開源軟件搭建的, java EE企業(yè)級的目前流行的一種WEB開發(fā)框架,該框架采用經典的J2ee三層架構(表現層,中間層(業(yè)務邏輯層)以及數據訪問層,在SSH框架中采用了優(yōu)秀的MVC框架設計模式,其中struts2作為表現層,負責控制業(yè)務邏輯層和表現層的交互,作用用來調用業(yè)務邏輯層,并將業(yè)務數據返回給表現層,然后組織展現,而Spring作為SSH框架的核心,其作用貫穿了整個中間層,將展現層,業(yè)務邏輯層,數據層以及實體對象無縫整合,數據訪問層采用hibernate作為ORM框架,通過實體關系映射工具JPA將關系數據庫的數據映射成對象,很方便地實現以面向對象方式操作數據庫,數據訪問層主要負責與實體對象的交互,該層封裝了數據的增,刪,改,查的操作,整個SSH框架采用全注解的方法搭建,與傳統(tǒng)的SSH框架相比,無需配置文件,實現方式更加簡單,開發(fā)效率更高在基于SSH(struts+hibernate+spring)框架三層開發(fā)模式中,業(yè)務層只專注于業(yè)務邏輯代碼的編寫,不關心表現層或者數據訪問層,各盡其職,而往往這些業(yè)務功能就代表一個功能,在系統(tǒng)管理中,除了實現相關的業(yè)務功能的同時,一個業(yè)務功能就相對應一個操作權限,對應一個資源,對應一個URL地址,需要在設計時去滿足不同用戶的需求,在使用系統(tǒng)時,那些角色具有的資源,達到控制那些用戶具有相應的訪問權限在顯示層,只體現該功能是否可以操作,或者展示給用戶是否能進行相應的操作,數據訪問層,僅僅只是單純的對數據進行相關的增刪改查的操作,在業(yè)務代碼中,往往需要增加些額外的功能比如日志管理,權限管理等,如果把具有權限邏輯判斷的代碼嵌入進業(yè)務層中,不利于系統(tǒng)的維護和擴展,這種硬編碼的方式會導致大量的重復的代碼的出現,也不利于各個模塊的重用,為了避免上述問題的出現,在設計系統(tǒng)的時候,往往把與業(yè)務無關的代碼進行抽取,抽取成相應的公共方法,這樣避免了代碼的臃腫,這也滿足OOAD相關的設計原則,但是缺乏靈活性,可擴展性,維護性而借助于java提供的動態(tài)代理技術,結合注解技術實現權限控制,可以解決以上的問題。

2 核心技術

2.1 注解

隨著企業(yè)端軟件應用越來越復雜,配置文件內容越來越多,導致配置文件冗余,使得可讀性變差,為了解決程序配置可讀性問題, jdk1.5推出的一項技術——注解(Annotation),其顧名思義為注釋,解釋。但從功能上卻不僅僅是注釋那么簡單,淺顯的理解注解其實就是代碼里的特殊標記, 注解相當于代碼中配置文件,其目的就是減少在xml文件的配置,也就是說,傳統(tǒng)方式通過配置文件告訴類如何運行,有了注解技術后,開發(fā)人員可以通過注解告訴類如何運行,注解單一的工作不能發(fā)揮其作用,必須同時需要結合反射技術一起使用,在Java技術里注解的典型應用是:可以通過反射技術去得到類里面的注解,以決定怎么去運行類 注解程序開發(fā)流程。

2.1.1注解類實現

使用@interface 定義所有注解類都默認繼承 java.lang.annotation.Annotation 接口在一個類 應用注解類,通過反射技術獲得注解信息通過java.lang.reflect.AnnotatedElement 在程序運行時 獲得注解信息。

2.2 動態(tài)代理

java動態(tài)代理在jdk1.2出現的技術,代理模式有分靜態(tài)代理以及動態(tài)代理,代理模式是常用的java設計模式,當.class文件 被類加載器加載到內存形成Class對象,所有程序訪問都是針對Class對象 ,動態(tài)代理技術可以根據Class對象的實現接口,在內存中虛擬構造一個對象,該對象成為代理對象,訪問真實對象的所有API的過程中 都將通過代理對象去訪問。動態(tài)代理的特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發(fā)給委托類,以及事后處理消息等。代理類與委托類之間通常會存在關聯(lián)關系,一個代理類的對象與一個委托類的對象關聯(lián),代理類的對象本身并不真正實現服務,而是通過調用委托類的對象的相關方法,來提供特定的服務。動態(tài)代理的原理如圖1所示。

圖1 動態(tài)代理原理

2.2.1實現動態(tài)代理的兩個核心方法

實現InvocationHandler接口在該接口中唯一定義了一個方法invoke(Object obj,Method method,Object[] args) 該接口是我們需要去實現的,其中該方法中三個參數分別代表。

a)參數obj代表需要代理類;

b)method代表被代理的方法;

c)args代表被代理的方法的參數數組

java提供了一個Proxy類,調用它的靜態(tài)方法Proxy.newProxyInstance(obj.getClass()

.getClassLoader(),Obj.getClass.getInstances(),this)方法可以生成某個對象的代理對象,使用該方法生成代理對象時,該方法有三個參數,三個參數分別是:

a)生成代理對象使用哪個類裝載器;

b)生成哪個對象的代理對象,通過接口指定;

c)生成的代理對象的方法里;

2.2.2權限管理的實現

在基于mvc設計模式的J2ee開發(fā)模式中,service層專注于業(yè)務代碼邏輯的編寫,如果把具有權限邏輯判斷的代碼嵌入進業(yè)務層中,不利于系統(tǒng)的維護和擴展,這種硬編碼的方式會導致大量的重復的代碼的出現,也不利于各個模塊的重用而借助于java提供的動態(tài)代理技術,可以解決以上的問題,結合注解技術實現權限控制。

在系統(tǒng)中,應用程序中有Privilegeinfo,OperateService,ServiceFactory三個主要核心類, 其中serviceFactory進行權限判斷

/*當前注解用于配置用戶的權限信息*/

public @interface Privilegeinfo {

String value();}

public class OperateService {

/*根據該用戶id獲取其擁有的權限*/

public List findPrivilege(int id) {

OperateDao operateDao = new OperateDaoImpl();

List privileges = operateDao.findPrivileges();

return privileges;}}

/* 該業(yè)務工廠類用于利用動態(tài)代理技術讀取當前用戶是否具有對應的業(yè)務權限*/

public class ServiceFactory {

//該方法用于利用動態(tài)代理讀取權限.

public static OperateService getOperateService(final Userinfo userinfo){

OperateService proxyService = (OperateService);

Proxy.newProxyInstance(OperateService.class.getClassLoader(), OperateServiceImpl.class.getInterfaces(), new InvocationHandler() {

//invoke()方法用于通過反射技術讀取對應業(yè)務方法的權限信息

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

Privilegeinfo privilege = method.getAnnotation(Privilegeinfo.class);

// 獲取對應業(yè)務方法的權限信息

String privilegeinfo = privilege.value();

// 獲取當前用戶的權限信息(查詢數據庫表,這里需要用戶user_id信息)

......

// 判斷當前用戶是否具有對應的權限信息

for (String privilegeValue : privileges) {

if(privilegeinfo.equals(privilegeValue)){

return "success";}// 如果具有

}// 如果沒有

return "error";}

});

return proxyService; //返回業(yè)務代理類

}}

3 結束語

利用Java動態(tài)代理技術實現權限系統(tǒng)的控制,能夠有效減少降低業(yè)務邏輯和權限代碼的耦合,進一步減少代碼量,減少工作量,提高程序的可擴展性,可維護性,在實際的web系統(tǒng)的開發(fā)過程中,可以根據本文提出的原理和實例,定義具體的handler接口的實現,當Invocation-Handler被觸發(fā),調用相應的handler進行處理。

參考文獻:

[1] 韓江. 基于SSH架構的Java Web通用權限管理的設計[J]. 智能計算機與應用, 2014(4):52-54.

[2] 牛牧, 劉麗, 祝建中. 基于JAVA動態(tài)代理的事務處理[J]. 科技廣場, 2007(3):159-161.