一種面向切面編程的攔截器系統及方法

            文檔序號:6573406閱讀:336來源:國知局
            專利名稱:一種面向切面編程的攔截器系統及方法
            技術領域
            本發明涉及計算機系統開發領域,特別是涉及計算機J2EE企業級應用系 統開發領域,具體是涉及一種在Stmts下的面向切面編程(AOP)的攔截器系 統及方法。
            背景技術
            J2EE, Java2平臺企業版(Java 2 Platform Enterprise Edition),是Sun公司為企業級應用推出的標準軟件系統開發平臺。而隨著Java技術的發展,J2EE 平臺得到了迅速的發展,成為Java語言中最活躍的體系之一。現如今,J2EE 不僅僅是指一種標準平臺(Platform),她更多的表達著一種軟件系統架構和軟 件系統編程方法。J2EE企業級Web應用開發系統框架有Struts、 Webwork、 JSF、 Tapestry等開發框架。其中,Stmts系統框架是開放源代碼的企業級Web應用開發系統框架,目 的是從整體上減輕構造企業Web應用的負擔。而J2EE的表示層一般是用Struts 組件系統框架來編寫,其是目前最常用的企業級Web應用開發系統框架。Struts系統框架是基于Model 2設計模式的J2EE應用開發平臺。Model 2 體系是MVC (Model-View-Controller)體系中的一種。在MVC體系中,數據 模型(Model)、表現邏輯(View)和控制邏輯(Controller)是分離的組件, 但它們可以互相通信,Struts系統框架正是定位在基于Model 2設計模式的 J2EE應用開發系統框架。但是,相比于其它J2EE企業級Web應用開發系統框架,如Webwork等, Struts系統框架在默認的情況下并沒有實現面向切面的編程(AOP)。面向切面編程(Aspect Oriented Programming, AOP)主要實現的目的是 針對業務處理過程中的切面進行提取,其面對處理過程中的某個步驟階段,以 獲得邏輯過程中各部分之間低耦合性的隔離效果。例如最常見的日志記錄,現在需要提供一個查詢學生信息服務,并記錄有誰進行了這個查詢。如果按照傳 統的編程方式實現的話,那首先實現了一個査詢學生信息的服務接口(StudentlnfoService.java)禾Q其實現類(StudentlnfoServicelmpl.java),然后 為了進行記錄,在實現類(StudentlnfoServicelmpLjava)中添加實現記錄的過 程。這樣的話,如果要實現的服務有多個,則要在每個實現的類都添加這些記 錄過程。這種實現方式很繁瑣,而且每個實現類都與記錄服務日志的行為緊耦 合,違反了面向對象的規則。而為了實現日志記錄服務與業務處理過程分離, 使査詢學生信息的服務正常進行,則人們將日志記錄行為單獨進行記錄,其他 業務處理如査詢學生信息的服務不知道存在這些日志記錄過程,這就是面向切 面的編程(AOP)。面向切面的編程,就是把某個方面的功能提出來與一批對 象進行隔離,這樣與一批對象之間降低了耦合性,可以就某個功能進行編程。面向切面編程(AOP)可以使用一個代理類(Proxy),通過攔截一個對 象的行為并添加需要的功能來完成,即攔截方法,也就是面向切面編程的攔截 方法,也叫攔截器。Struts系統框架在默認情況下沒有實現面向切面編程(AOP)實現,這和 WebWork等開發框架相比存在缺陷。因此,現有的技術中,通過Lars Hoss 和Don Brown編寫SAIF (Struts Action Invocation Framework),能夠在Struts 系統框架上實現面向切面編程(AOP)。但是,SAIF實現的功能很少,其一般只能實現Struts系統框架上的最基 本的類的攔截,即只能針對一個類(如Action類)或多個類進行攔截,不能 實現對各個類里面的實現方法進行攔截(即方法級攔截器),其實用性比較差。發明內容本發明的目的在于提供一種面向切面編程的攔截器系統及方法,其全面在 Struts應用開發系統框架中實現面向切面編程(AOP),實現類的攔截(類級 攔截器)和類中實現方法的攔截(方法級攔截器),具有很好的實用性。為實現本發明目的而提供的一種面向切面編程的攔截器系統,是在Struts 應用開發系統框架下實現的,包括接口模塊,攔截器配置模塊,其中接口模塊,用于設置Struts框架下的攔截器接口,基于該接口實現攔截器類;攔截器接口, 一般基于該接口實現攔截器類,在調用攔截器的時候會執行 在接口中定義的方法;攔截器配置模塊,用于配置攔截器的配置文件,將攔截器配置到相應的執 行路徑中去。所述的面向切面編程的攔截器系統,還可以包括讀取模塊和執行模塊,其中讀取模塊,在Struts啟動初始化時,讀取配置文件,解析得到配置文件中配置的攔截器,并初始化;執行模塊,用于在客戶端訪問網站時,根據路徑調用Struts Action或者DispatchAction類,獲取路徑對應的攔截器,使用相應的攔截器接口,實現在Struts框架下面向切面編程的攔截。所述的面向切面編程的攔截器系統,所述接口模塊中,還可以包括攔截器管理模塊,用于在Spring容器的配置文件配置攔截器類對應的bean,實現在Spring容器中統一管理攔截器對象。所述的面向切面編程的攔截器系統,所述讀取模塊中,還可以進一步包括Struts插件模塊,用于在struts框架下調用Struts Action類或者DispatchAction類前(一般Web應用啟動時),在Struts配置文件中加入攔截器配置模塊,在Struts配置文件中以插件的方式配置上去;所述讀取模塊在Struts啟動初始化時,由Struts插件類讀取配置文件。 為實現本發明目的還提供一種面向切面編程的攔截方法,包括下列步驟 步驟A,設置Struts框架下的攔截器接口,基于該接口實現攔截器類; 步驟B,配置攔截器的配置文件結構,并將攔截器配置到相應的執行路徑中去,實現在Struts框架下初始化時能夠讀取面向切面編程的方法級攔截器。 所述的面向切面編程的攔截方法,所述步驟B之后還可以包括下列步驟 步驟C,在Struts啟動初始化時,讀取配置文件,解析得到配置文件中配置的攔截器,并初始化;步驟D,當客戶端訪問網站時,服務器端Servlet容器根據路徑調用StrutsAction類或者DispatchAction類,獲取路徑對應的攔截器,使用相應的攔截器接口 ,實現在Struts框架下面向切面編程的攔截。 所述步驟A還包括下列步驟-在Spring容器的配置文件配置攔截器類對應的bean,實現在Spring容器 中統一管理攔截器對象。所述步驟C中讀取配置文件是由Struts插件類完成的。 所述歩驟C可以包括下列步驟步驟C1,采用Diggester工具將xml配置文件讀入,產生Java對象; 步驟C2,解析路徑的攔截配置器,將配置分別提取,并將攔截器棧替換對應的一批攔截器;步驟C3,在每個路徑的攔截配置器中加入缺省攔截器指定的攔截器; 步驟C4,在每個路徑的攔截配置器中排除被排除的缺省攔截器中指定的攔截器;步驟C5,判斷配置攔截器是否要按順序執行,若配置中攔截配置器按順 序執行的配置為真,則對每個路徑的攔截配置器中攔截器進行排序,否則直接 返回。所述歩驟D中,使用攔截器接口,實現在struts框架下面向切面編程的攔 截,可以包括下列步驟步驟D1,執行攔截器中的前攔截器接口;步驟D2,判斷返回值是否為空,如果不為空,則表示結束,攔截器得到 結果,攔截過程結束,轉到步驟D6;步驟D3,如果為空,則執行Struts Action或者DispatchAction對象類方法, 正常執行Struts程序;步驟D4,如果拋異常,在執行Struts Action或者DispatohAction對象類方 法過程中出現異常情況時,則執行攔截器中的異常處理攔截器接口,然后,攔 截過程結束,轉到步驟D6;步驟D5,否則,正常執行Struts程序后,執行攔截器中的后攔截器接口;步驟D6,將攔截或者執行結果送出。所述接口包括前攔截器接口 、后攔截器接口和/或異常處理攔截器接口 。 所述攔截器包括權限控制攔截器、數據驗證攔截器、日志記錄攔截器以及異常處理攔截器中的一種或者一種以上的組合。本發明的有益效果是本發明的面向切面編程(AOP)的攔截器系統及方法,其在Struts應用開發系統框架下實現方法級攔截,其不但支持Struts Action類,也支持Struts DispatchAction類,支持Struts l.X全系列版本。而且,本發 明還利用Spring容器來統一管理攔截器對象,通過SpringFramework (Spring 框架)提供的Spring容器統一管理攔截器,使得程序代碼功能分解清晰,更 容易被維護,并支持按指定順序執行攔截器,從而全面在Struts開發框架中實 現面向切面編程,通過Struts Action類實現類的攔截(類級攔截器),通過Struts DispatchAction類實現方法級的攔截(方法級攔截器),具有很好的實用性。


            圖1為本發明面向切面編程(AOP)的攔截器系統結構示意圖; 圖2為本發明面向切面編程(AOP)的攔截方法流程圖; 圖3為讀取配置文件并初始化過程流程圖;圖4為使用攔截器接口,實現在Struts框架下面向切面編程(AOP)的攔 截的過程。
            具體實施方式
            為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實 施例,對本發明的一種面向切面編程的攔截器系統及方法進行進一步詳細說 明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定 本發明。本發明的面向切面編程的攔截器系統及方法,是實現在Struts應用幵發系 統框架下11的方法級攔截器。其當客戶端訪問網站系統時,在服務器端的 Servlet容器根據路徑調用相關的Struts Action類或者DispatchAction類時,使 用本發明的攔截器系統和方法,實現工作在Struts l.x中的方法級攔截,即Struts l.X下的方法級面向切面編程(AOP)實現。為了說明本發明的Struts下的面向切面編程的攔截器及方法,首先說明 Struts體系。Struts應用開發系統框架11的目標是為Mode12 Web應用開發提供一個強 大的框架。Struts應用開發系統框架11能夠隱藏Web訪問固有的"混亂", 幫助開發者建立起清晰和明確的秩序和規則。典型的Struts應用開發系統框架 11要用到三種配置文件web.xml、 struts-config.xml以及可選的應用資源文件。web.xml是Web應用的標準配置文件,是所有J2EE web應用必需的組成 部分。應用服務器通過該配置文件把URL映射到Servlet服務器和JSP GavaServer Pages, —種動態網頁技術標準),通過該配置文件為Servlet服 務器和JSP指定啟動參數。為Stmts應用開發系統框架11提供的web.xml文 件很簡單,真正必需的只有一個主ActionServlet類控制器(Controller)定義, 以及一個確保Struts請求傳遞到ActionServlet類控制器的映射。 一般地,以 ".do"結尾的URL (Uniform Resoure Locator,統一資源定位器)都是Struts 請求,例如/login.do。 Servlet服務器利用web.xml文件中的映射,把該請求傳 遞給ActionServlet類控制器。接著,ActionServlet類控制器決定如何分配該請 求。而ActionServlet類控制器的決定依據是Struts-config.xml中定義的方法邏 輯,和/或是通過ActionServlet派生類額外定義的分配邏輯。Struts-config.xml稱為Struts配置文件。Struts應用開發系統框架11是一 個依靠struts-config.xml文件把組件連接起來的系統。struts-config.xml文件為 Web應用的組件定義了邏輯名稱,也定義了它們在Struts框架下的屬性和關系, 就像web.xml文件在Web應用框架之內定義組件 一 樣。 一般地, struts-config.xml文件包含了與Struts框架有關的應用信息,包括數據源信息、 Form Bean信息、Global Forwards f言息禾口 Actions信息。其中,Action信息定 義了 Struts應用體系的請求分配信息,它們是核心分配器的補充定義,負責處 理各種具體的請求類型。Struts應用的基本工作模式是主分發器ActionServlet類控制器調用一個 動作分配器,動作分配器確定或者構造出Model部分(一個JavaBean或其他 Java對象),并把它提供給View (通常是一個JSP頁面)。如圖1所示,本發明的面向切面編程的攔截器系統,是在Struts應用開發 系統框架ll下,包括接口模塊21,攔截器配置模塊22,讀取模塊23和執行 模塊24,其中接口模塊21,設置struts框架下運行的接口,基于該接口實現攔截器類, 即利用該接口實現攔截器類。通過在struts框架下定義可被讀取的前攔截器接口 (beforeAction)、后攔 截器接口 (afterAction)以及異常處理攔截器接口 (throwsAction)。利用該接 口實現在struts框架下的接口攔截器類。攔截器配置模塊22,用于通過接口模塊21配置攔截器的配置文件,并將 攔截器配置到相應的執行路徑中去。所述的攔截器,可以分為權限控制攔截器32、數據驗證攔截器33、曰志 記錄攔截器34、異常處理攔截器35等。權限控制攔截器32,用于判斷用戶是否有訪問對應路徑的權限,若有權 限則返回空值(null);若沒有則返回到錯誤頁面。其一般通過運行前攔截器 (beforeAction)接口實現。數據驗證攔截器33,用于檢査客戶端提交的數據是否符合服務器所要求 的規則,若符合則返回空值(mill),若不符合則返回到錯誤頁面。其一般通 過運行前攔截器(beforeAction)接口實現。曰志記錄攔截器34,用于截獲方法調用參數、返回值、調用所花時間等 信息,然后打印日志到文件或者控制臺,最后返回空值(null)。其一般通過 運行后攔截器(afterAction)接口實現。異常處理攔截器35,用于根據傳入的參數Exceptio-e的類型分別進行處 理,然后分別返回到相應的錯誤頁面。其一般通過異常處理攔截器 (throwsAction)接口實現。讀取模塊23,在Stmts啟動初始化時,由Struts插件類讀取配置文件 struts-interceptor.xml,解析得到配置文件中配置的攔截器,并初始化。執行模塊24,用于在客戶端訪問網站時,根據路徑調用相關的Struts Action 或者DispatchAction類,獲取路徑對應的攔截器,使用攔截器,實現在Struts 框架下面向切面編程(AOP)的攔截。較佳地,本發明的面向切面編程的攔截器系統,在接口模塊21中,還包 括攔截器管理模塊31,用于在Spring容器的配置文件配置攔截器類對應的 bean,實現在Spring容器中統一管理攔截器對象。更佳地,所述面向切面編程的攔截器系統,在讀取模塊23中,還包括Struts 插件模塊,用于在struts框架下調用Struts Action類或者DispatchAction類前, 在Struts配置文件中加入攔截器配置模塊22,作為Struts配置文件插件,使得 在struts框架下調用Struts Action類或者DispatchAction類前,將攔截器配置 文件配置到相應的路徑中并駐留在系統中,不再每執行一次攔截器必須首先執 行攔截器模塊。ii特別需要說明的是,當用讀取模塊23中的Struts插件模塊將攔截器模塊 作為作為Struts配置文件插件時,則在通過接口模塊21配置struts框架下調用 Struts Action類或者DispatchAction類中的每個方法時不再調用攔截器配置模 塊22,將攔截器配置文件中的攔截器配置到相應的執行路徑中去。本發明的面向切面編程的攔截器系統,首先設置在struts框架下運行的攔 截器接口;再基于此接口實現攔截器類;然后利用在接口模塊21中的攔截器 管理模塊31在Spring容器的配置文件配置攔截器類對應的bean,實現在Spring 容器中統一管理攔截器對象;接著,按照攔截器配置文件的結構,在配置文件 中將攔截器配置到相應的執行路徑中去。其后,讀取模塊23在Struts啟動初始化時,由Struts插件類讀取配置文 件struts-interceptor.xml,解析得到配置文件中配置的攔截器,并初始化。最后,執行模塊24在客戶端訪問網站時,服務器端Servlet容器根據路徑 調用相關的Struts Action或者DispatchAction類,使用攔截器,實現在Struts 框架下面向切面編程(AOP)的攔截。如圖2所示,下面詳細描述本發明的Struts應用開發系統框架下11基于 切面編程的攔截方法步驟S100,設置在struts框架下運行的攔截器接口,基于該接口實現攔截 器類,即利用該接口實現在struts框架下的接口攔截器類;一般來說調用對象的方法時有3個處理過程,第一步是開始調用,第二步 是值返回,另外如果有異常拋出對應的就有異常處理過程,對應就有了前攔截 方法、后攔截方法和異常處理攔截方法。因此,首先設置在struts框架下可被讀取的前攔截器接口 (beforeAction)、 后攔截器接口 (afterAction)以及異常處理攔截器接口 (throwsAction)。接口 中的參數對應于Struts Action中的execute()方法中的參數。攔截器接口代碼實現如下public interface Actionlnterceptor { /***前攔截器接口* @param action被攔截器攔截的Action實例* @param mapping訪問路徑對應的ActionMapping對象* @param form路徑對應的表單,如果沒有對應的表單則為null* @param request客戶端瀏覽器傳送過來的對象* @param response送回給客戶端瀏覽器的對象* @return對應在Struts中的返回路徑 */public ActionForward beforeAction (Action action, ActionMapping mapping ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception;/***后攔截接口* @param action被攔截器攔截的Action實例* @param mapping訪問路徑對應的ActionMapping對象 *@paramform路徑對應的表單,如果沒有對應的表單則為null* @param request客戶端瀏覽器傳送過來的對象* @param response送回給客戶端瀏覽器的對象* @return對應在Stmts中的返回路徑 */public ActionForward afterAction(Action action, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception;/***異常處理攔截器接口* @param action被攔截器攔截的Action實例* @param mapping訪問路徑對應的ActionMapping對象* @param form路徑對應的表單,如果沒有對應的表單則為null* @param request客戶端瀏覽器傳送過來的對象* @param response送回給客戶端瀏覽器的對象 *@parame拋出的異常* @retum對應在Struts中的返回路徑 */public ActionForward throwsAction(Action action, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception;然后,利用該接口實現在struts框架下的接口攔截器類。 攔截器一般都使用代理來實現,本發明也使用代理類實現,其類名為 InterceptorActionProxy 。 是基于 Springframework ( Spring 框架)的 org.springframework.web.struts.DelegatingActionProxy 實現,Springframework 的org.springframework.web.struts.DelegatingActionProxy類提供了使用Sping容 器管理Struts Action的功能,InterceptorActionProxy類在其基礎上增加了根據配置文件去查找并執行相關的攔截器的功能。Struts Action或者DispatchAction的^f戈理類InterceptorActionProxy類的^(乍 用是當用戶訪問網站某一路徑時,Stmts在調用路徑對應的Action類或者 DispatchAction類時,實際上先調用的是此類,調用時執行其中的execute方法, 在這個方法中,調用攔截器配置文件讀取類獲取路徑對應的攔截器,執行攔截 器類中的相關方法并調用運行真實的Struts Action或者DispatchAction,并根據兩者調用的結果返回。InterceptorActionProxy類的主要實現代碼如下public class InterceptorActionProxy extends DelegatingActionProxy {* Pass the execute call on to the Spring-managed delegate Action.*@S66org.springframework.web.struts.DelegatingActionProxy#getDelegateAction*/public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {〃獲取訪問路徑前綴即模塊名String module = mapping.getModuleConfig().getPrefix();//若模塊為空值,則為默認模塊 if (module == null) { module -"";〃根據模塊獲取對應的Spring容器引用WebApplicationContext wac = getWebApplicationContext(getServlet(), mapping.getModuleConfig()); 〃獲取代理目標類Action delegateAction = getDelegateAction(mapping);ActionForward forward = null;Actionlnterceptor[JnterceptorArray = null;try{〃調用配置文件讀取類,査找此映射相關的攔截器interceptorArray 二 InterceptorConfig.getlnterceptorArray(module, request, wac); } catch (Exception e) {〃獲取攔截器數量int size = interceptorArray.length; if (size > 0) {for (int i = 0; i < size; i++) { try{〃執行所有攔截器中的前攔截方法,如果設置了順序則要按順序執行forward = interceptorArray[i.beforeAction(delegateAction,mapping, form, request, response); if (forward != null) {return forward; 〃如果返回值不為空,則不再執行后面的代碼直接返回} catch (Exception e) {〃如果執行過程中出現了異常,并且是ModuleExc印tion,則拋出異常 if (e instanceof ModuleException) { throw e;continue; 〃若拋出的不是ModuleExc印tion,則忽略try{〃執行Struts Action中的相關方法forward = delegateAction.execute(mapping, form, request, response); } catch (Exception e) {〃如果不是ModuleExc印tion類型則進行處理 if (e instanceof ModuleException) {throw e; } else {for (int i = 0; i < size; i++) { 〃執行所有欄截器中的異常處理攔截方法,如果設置了順序則要按順序執行forward 二 interceptorArray卩j.throwsAction(delegateAction, mapping, form, request, response, e);if (forward != null) {return forward; //如果返回值不為空,則不再執行后面的代碼直接返回//將未處理的異常拋出,交給容器處理,用于調試 throw e;ActionForward afterForward = null; for (int i = 0; i < size; i++) { try{〃執行所有攔截器中的后攔截方法,如果設置了順序則要按順序執行 afterForward = interceptorArray[i].afterAction(delegateAction, mapping, form, request, response); if (afterForward != null) {return afterForward; 〃如果返回值不為空,則不再執行后面的代碼直接返回} catch (Exception e) {if (e instanceof ModuleException) {throw e;//如果執行過程中出現了異常,并且是 ModuleException,則拋出異常continue; 〃若拋出的不是ModuleExc印tion,則忽略} else {forward = delegateAction.execute(mapping, form, request, response); 〃如果攔截器數量為0,則直接執行對應的Actionreturn forward;更進一歩地,在Spring容器的配置文件配置攔截器類對應的bean,實現 在Spring容器中統一管理攔截器對象。Springframework (Spring框架)的核心是IoC (Inversion of Control,控帝ij 反轉)禾Q AOP。IoC是一種設計模式。IoC模式進一步降低了類之間的耦合度,并且改變 了傳統的對象的創建方法,實現了一種配置式的對象管理方式,Spring框架中 由IoC容器負責配置性的對象的管理。IoC模式極大的提高了系統開發與維護 的靈活性。通過Spring配置文件可以將Struts Action和攔截器配置在Spring配置文 件中,這樣SpringFramework就會自動的創建這些對象并設置相關的依賴。 Spring配置樣例如下<!—配置一個名為setUserAdminFlaglnterc印tor的攔截器--><bean id="setUserAdminFlaglnterceptor" class="com.bupticet.locai,user_admin.web.interceptor.SetUserAdminFlaglnterceptor" /> <!一配置一個名為deleteUploadFileAllowSelfAndAdminlnterc印tor的攔截器,其 依賴userAdminManager對象一><bean id="deleteUploadFileAllowSelfAndAdminlnterceptor" class="com.bupticet.local.user—admin.web.interceptor.DeleteUploadFileAllowSelfAndAd minlnterceptor"><property name="userAdminManager"><ref local=''userAdminManager" /> </property> </b63n>較佳地,所述代理類是基于 Spring Framework 中 org.springframework.web.struts.DelegatingActionProxy的類。步驟S200,配置攔截器的配置文件結構struts-interceptor.xml,并將攔截 器配置文件中的攔截器配置到相應的執行路徑中去,實現在Struts框架下初始 化時能夠讀取面向切面編程的方法級攔截器;在Struts應用開發系統框架下11,該攔截器能夠被Stmts框架中的配置文 件struts-config.xml在啟動初始化時讀取。攔截器配置文件結構包括四個部分★第一個部分是config段,用來對攔截器系統進行功能性的配置;★第二部分是default-interceptors段,用來配置此模塊中默認要使用的攔 截器;★第三部分是interceptor-stacks段,將一批攔截器配置中攔截器棧,以方便成批配置攔截器時使用; ★第四部分則是action-interceptors段,用來對指定路徑和方法的Action進行攔截器配置, 一次可以配置一個攔截器,也可以配置攔截器棧,另外也可以配置排除默認的攔截器。 以下是使用Diggester讀取攔截器配置文件的主要代碼 /***添力卩Digester Rules* @p3ram d Vprivate static void addDigesterRules(Digester d) {〃i賣取stmts-interceptor/config/order-interceptor配置段 d.addObjectCreate("stmts-interceptor/config/order-interceptor",Orderlnterc印torModel.class); 〃創建配置段對應的對象(下同) d.addSetPraperties("stnjts-interceptor/config/order-interceptor"); 〃在對象中 將XML中的屬性對應的設置進去(下同)d.addSetNext("struts-interceptor/config/order-interceptor","setOrderlnterc印tor);〃設置加入下一個對象時執行的方法(下同) 〃讀取stmts-interceptor/default-interceptors/default-interceptor配置段 d.addObjectCreate("struts-interceptor/default-interceptors/default-interceptor",DefaultlnterceptorModel.class);d.addSetProperties("stmts-interceptor/default-interceptors/default-interceptor"); d.addSetNext("struts-interceptor/default-interceptors/default-interceptor", "addDefaultlnterceptor");\〃 i賣取struts-interceptor/interceptor-stacks/interceptor-stack配置段 d.addObjectCreate("struts-interceptor/interceptor-stacks/interceptor-stack",InterceptorStackModel.class);d.addSetProperties("struts-interceptor/interceptor-stacks/interceptor-stack"); d.addSetNext("struts-interceptor/interceptor-stacks/interceptor-stack", "addlnterceptorStackModel"); 〃 i賣取struts-interceptor/interceptor-stacks/interceptor-stack/interceptor陽ref配置段 d.addObjectCreate( "struts-interceptor/interceptor-stacks/interceptor-stack/interceptor-ref', I nterceptorRef Model class);d.addSetProperties("struts-interceptoi7interceptor陽stacks/interceptor-stack/interce ptor-ref);d.addSetNext("struts-interceptor/interceptor-stacks/interceptor-stack/interceptor-rer,"addlnterceptorRef'); 〃 i賣取struts-interceptor/action-interceptors/action配置段 d.addObjectCreate("struts-interceptor/action-interceptors/action"'ActionModel.class); d.addSetProperties("struts-interceptor/action-interceptors/action"); d.addSetNext("struts-interceptor/action-interceptors/action", "addAction");〃i賣取struts-interceptor/action-interceptors/action/exclude-default配置段 d.addObjectCreate("stmts-interceptor/action-interceptors/action/exclude-default",\ExcludeDefaultModel.class);d.addSetProperties("struts-interceptor/action-interceptors/action/exclude-default"); d.addSetNext("struts-interceptor/action-interceptors/action/exclude-default", "setExcludeDefault"); 〃i賣取struts-interceptor/action-interceptors/action/exclude-default/exclude酉己—1!段 d.addObjectCreate( "struts-interceptor/action-jnterceptors/action/exclude-default/exclude", ExcludeModel.class);d.addSetProperties("stmts-interceptoi7action-interceptors/action/exclude-default/e xclude");d.addSetNext("struts-interceptor/action-interceptors/action/exclude-default/exclude", "addExdude");〃i賣取stmts-interceptor/action-interceptors/action/method配置段 d.addObjectCreate("struts-interceptor/action-interceptors/action/method", MethodModel.class);d.addSetProperties("struts-interceptor/actJon-interceptors/action/method"); d.addSetNext("stmts-interceptor/action-interceptors/action/method", "addMothod");〃i賣取struts-interceptor/action-interceptors/action/method/exclude-default配置段 d.addObjectCreate(d9。J9)u!/po£SE/uo!pe/SJOJd90J9}u!-uo!pe/」OJd90J9JU!,s}nJls--)s9!t9do」n-lssppB.--Jai-」o}dso」91u!/po£9E/uo!pe/SJOJd8J91u!-uo!pe/」£da。J91u!-ss4s=趙鵬2li9」-JOJd90Jalu!/POL-19E/uo一loe/SJold90J91u!-uo!VDe/」old90JQlu!-SSJls趙踏//- 9pnlox9ZJIn_3J9p-spnlox9/po£9E/uo!pe/SJ2d9a-91u!-uo!pe/」old90」^u!-sln.4s---apnlox9/po£9E/uo!pe/s」old9。J91u!-uo!pe/」old9。」slu!-SSJls--)s9!lJ3do」d^sppB.\,9pnpx9/llneJ.9p-9pnlox9/po£9E/uo!pe/SJold90」91u!-uo!peyJold90」su!-SSJls ¥a-opsfqoppe-P3g9pnlox9/Jlnei9p-9pnl。x9/poq一9E/uo一pe/s」cnd90J9JU一-uo!pe/」oidso.5JU!-ss.us磁脈一//-』J9p-9pnlox9/POL-lsE、uo!pe/SJOidao」9}u!-uo!pe/」oldao」91u!-SSJls--)PSN冗sppe-P一(』nei①p-spnlcos/po£9E、uo!pe/SJO》d90JanJ!-uo!pe/Jold90」91u!-ss4s,,)s9!t9doJd}3sppm.\;lneisp-9pnlox9、po£9£/uo!pe/s」£d90J >u!-uo!pe/」old9。」9iu!-ss.4s,-d.addSetNext("struts-interceptor/action-interceptors/action/method/interceptor-ref', "addlnterceptorRef'); 〃i賣取struts-interceptor/action-interceptors/action/method/stack-ref配置段 d.addObjectCreate("struts-interceptor/action-interceptors/action/method/stack-ref', StackRefModel.class);d.addSetProperties("struts-interceptor/action-interceptors/action/method/stack-rer); d.addSetNext("struts-interceptor/action-interceptors/action/method/stack-ref , "addStackRef');其中,Diggester是一個XML解析工具,它將XML直接讀取成Java對象。所述的攔截器,可以分為權限控制攔截器32、數據驗證攔截器33、曰志 記錄攔截器34、異常處理攔截器35等。權限控制攔截器32,用于判斷用戶是否有訪問對應路徑的權限,若有權 限則返回空值(null);若沒有則返回到錯誤頁面。其一般通過前攔截器接口 (beforeAction)實現。數據驗證攔截器33,用于檢查客戶端提交的數據是否符合服務器所要求 的規則,若符合則返回空值(null),若不符合則返回到錯誤頁面。其一般通 過前攔截器接口 (beforeAction)實現。日志記錄攔截器34,用于截獲方法調用參數、返回值、調用所花時間等 信息,然后打印日志到文件或者控制臺,最后返回空值(null)。其一般通過 后攔截器接口 (afterAction)實現。異常處理攔截器35,用于根據傳入的參數Exception-e的類型分別進行處 理,然后分別返回到相應的錯誤頁面。其一般通過異常處理攔截器接口 (throwsAction)實現。步驟S300,在Struts啟動初始化時,由Struts插件類讀取配置文件 struts-interceptor.xml,解析得到配置文件中配置的攔截器,并初始化;Java的Web應用程序(Java web application)啟動時,由Struts插件類 com.bupticet. strutsinterceptor. StrutsInterceptorContextLoaderPlugln裝載牛蘭截器 配置文件,要求在Spring容器裝載之后,再裝置Struts應用程序,如圖3所示, 其過程如下步驟S301 ,采用Diggester工具將xml配置文件讀入,產生Java對象(Java object);步驟S302,解析路徑的攔截配置器action-interceptors段,將配置分別提 取,并將攔截器棧stack-ref替換對應的一批攔截器interceptor;步驟S303,在每個路徑的攔截配置器action-interceptor中加入缺省攔截器 default-interceptors段指定的攔截器interceptor;步驟S304,在每個路徑的攔截配置器action-interceptor中排除被排除的缺 省攔截器exdude-default配置段中指定的攔截器interceptor;步驟S305,判斷配置攔截器是否要按順序執行,若配置器config段中路 徑的攔截配置器order-interceptor的配置為真(true),則對每個路徑的攔截配 置器action-interceptor中攔截器interceptor進行排序,否則直接返回。步驟S400,當客戶端訪問網站時,服務器端Servlet容器根據路徑調用相 關的Struts Action或者DispatchAction類,獲取路徑對應的攔截器,使用相應 的攔截器接口,實現在Struts框架下面向切面編程(AOP)的攔截。Struts DispatchAction禾卩Struts Action比較類似,不同之處在于 DispatchAction中可以有多個映射到訪問路徑的方法,而Action只能有一個 6xecute oDispatchAction繼承自Action類,它是一個抽象類,封裝了一些基礎方法, 來解決使用一個Action處理多個操作的能力,這就是DispatchAction最大的用途,它可以幫助我們用一個Action類,封裝一套類似的操作方法,節省了 類的數目,同時也減輕了后期維護的困難。本發明在配置文件中對每個Action的配置時,都有個method屬性,若這 個屬性為execute則就可以對Struts Action進行類級別的攔截;若這個屬性是 其它值,則就可以對Struts DispatchAction類中以這個屬性名命名的方法進行 方法級別的攔截,從而實現方法級的攔截。如圖4所示,下面詳細描述使用攔截器接口 ,實現在Struts框架下面向切 面編程(AOP)的攔截的過程歩驟S401,執行攔截器中的前攔截器接口 (Before-Action);歩驟S402,判斷返回值是否為空,如果不為空,則表示結束,攔截器得 到結果,攔截過程結束,轉到步驟S406;歩驟S403 ,如果為空,則執行Struts Action或者DispatchAction對象類方 法,正常執行Struts程序;步驟S404,如果拋異常,即在執行Struts Action或者DispatchAction對象 類方法過程中出現異常情況時,如網絡連接錯誤,讀寫磁盤文件錯誤等,則執 行攔截器中的異常處理攔截器(ThrowAction)接口,然后,攔截過程結束, 轉到步驟S406;步驟S405,否則,正常執行Struts程序后,執行攔截器中的后攔截器接 口 (AfterAction);步驟S406,將攔截或者執行結果(Response)送出。用類似Java的代碼表示其執行過程為try{interceptor.beforeAction(); strutsAction.invoke(); interceptor.afterAction(); }catch(Exception e){interceptor .throwAction();通過以上結合附圖對本發明具體實施例的描述,本發明的其它方面及特征 對本領域的技術人員而言是顯而易見的。本發明的面向切面編程(AOP)的攔截器及方法,其在Struts應用開發系 統框架下11實現方法級攔截,當客戶端訪問網站系統時,服務器端Servlet容 器根據路徑調用相關的Struts Action或DispatchAction時,使用本發明的攔截 方法配置攔截器,例如權限控制攔截器、數據驗證攔截器、日志記錄攔截器、 異常處理攔截器,并用SpringFmmework提供的容器來統一管理這些攔截器對 象,使得程序代碼功能分解清晰,更容易被維護。其不但支持Struts Action類, 也支持Struts DispatchAction類,支持Stmts l.X全系列版本甚至更高的版本。 而且,本發明做到用Spring容器來統一管理攔截器對象,支持按指定順序執 行攔截器,從而全面在Struts開發框架中實現面向切面編程,實現類的攔截(類 級攔截器)和各個類中的實現方法而進行攔截(方法級攔截器),具有很好的 實用性。以上對本發明的具體實施例進行了描述和說明,這些實施例應被認為其只 是示例性的,并不用于對本發明進行限制,本發明應根據所附的權利要求進行 解釋。
            權利要求
            1. 一種面向切面編程的攔截器系統,是在Struts應用開發系統框架下實現的,其特征在于,包括接口模塊,攔截器配置模塊,其中接口模塊,用于設置Struts框架下的攔截器接口,基于該接口實現攔截器類;攔截器配置模塊,用于通過接口模塊配置攔截器的配置文件,并將攔截器配置到相應的執行路徑中去。
            2、 根據權利要求1所述的面向切面編程的攔截器系統,其特征在于,還 包括讀取模塊和執行模塊,其中讀取模塊,在Struts啟動初始化時,讀取配置文件,解析得到配置文件中 配置的攔截器,并初始化;執行模塊,用于在客戶端訪問網站時,根據路徑調用Struts Action或者 DispatchActkm類,獲取路徑對應的攔截器,使用相應的攔截器接口,實現在 Struts框架下面向切面編程的攔截。
            3、 根據權利要求1或2所述的面向切面編程的攔截器系統,其特征在于, 所述接口模塊中,還包括攔截器管理模塊,用于在Spring容器的配置文件配 置攔截器類對應的bean,實現在Spring容器中統一管理攔截器對象。
            4、 根據權利要求2所述的面向切面編程的攔截器系統,其特征在于,所 述讀取模塊中,還進一步包括Struts插件模塊,用于在struts框架下調用Struts Action類或者DispatchAction類前,在Struts配置文件中加入攔截器配置模塊, 作為Struts配置文件插件;所述讀取模塊在Struts啟動初始化時,由Struts插件類讀取配置文件。
            5、 根據權利要求1或2所述的面向切面編程的攔截器系統,其特征在于, 所述接口包括前攔截器接口 、后攔截器接口和/或異常處理攔截器接口 。
            6、 根據權利要求1或2所述的面向切面編程的攔截器系統,其特征在于, 所述攔截器包括權限控制攔截器、數據驗證攔截器、日志記錄攔截器以及異常 處理攔截器中的一種或者一種以上的組合。
            7、 一種面向切面編程的攔截方法,其特征在于,包括下列步驟 步驟A,設置Struts框架下的攔截器接口,基于該接口實現攔截器類;;步驟B,配置攔截器的配置文件結構,并將攔截器配置到相應的執行路徑 中去,實現在Struts框架下初始化時能夠讀取面向切面編程的方法級攔截器。
            8、 根據權利要求7所述的面向切面編程的攔截方法,其特征在于,所述步驟B之后還包括下列步驟步驟C,在Struts啟動初始化時,讀取配置文件,解析得到配置文件中配 置的攔截器,并初始化;步驟D,當客戶端訪問網站時,服務器端Servlet容器根據路徑調用Struts Action類或者DispatchAction類,獲取路徑對應的攔截器,使用相應的攔截器 接口,實現在Stmts框架下面向切面編程的攔截。
            9、 根據權利要求7或8所述的面向切面編程的攔截方法,其特征在于, 所述步驟A還包括下列步驟在Spring容器的配置文件配置攔截器類對應的bean,實現在Spring容器 中統一管理攔截器對象。
            10、 根據權利要求8所述的面向切面編程的攔截方法,其特征在于,所述 步驟C中讀取配置文件是由Struts插件類完成的。
            11、 根據權利要求IO所述的面向切面編程的攔截方法,其特征在于,所 述步驟C包括下列步驟步驟C1,,采用Diggester工具將xml配置文件讀入,產生Java對象; 歩驟C2,解析路徑的攔截配置器,將配置分別提取,并將攔截器棧替換對應的一批攔截器;步驟C3,在每個路徑的攔截配置器中加入缺省攔截器指定的攔截器; 歩驟C4,在每個路徑的攔截配置器中排除被排除的缺省攔截器中指定的攔截器;步驟C5,判斷配置攔截器是否要按順序執行,若配置器中路徑的攔截配 置器的配置為真,則對每個路徑的攔截配置器中攔截器進行排序,否則直接返 回。
            12、 根據權利要求8所述的面向切面編程的攔截方法,其特征在于,所述 步驟D中,使用攔截器接口,實現在struts框架下面向切面編程的攔截,包括 下列步驟步驟D1,執行攔截器中的前攔截器接口;步驟D2,判斷返回值是否為空,如果不為空,則表示結束,攔截器得到 結果,攔截過程結束,轉到歩驟D6;步驟D3,如果為空,則執行Struts Action或者DispatchAction對象類方法, 正常執行Struts程序;步驟D4,如果拋異常,在執行Struts Action或者DispatchAction對象類方 法過程中出現異常情況時,則執行攔截器中的異常處理攔截器接口,然后,攔 截過程結束,轉到步驟D6;歩驟D5,否則,正常執行Struts程序后,執行攔截器中的后攔截器接口;步驟D6,將攔截或者執行結果送出。
            13、 根據權利要求7或8所述的面向切面編程的攔截方法,其特征在于, 所述接口包括包括前攔截器接口 、后攔截器接口和/或異常處理攔截器接口 。
            14、 根據權利要求7或8所述的面向切面編程的攔截方法,其特征在于, 所述攔截器包括權限控制攔截器、數據驗證攔截器、日志記錄攔截器以及異常 處理攔截器中的一種或者一種以上的組合。
            全文摘要
            本發明公開了一種面向切面編程的攔截器系統及方法。其包括設置在Struts框架下運行的攔截器接口,基于該接口實現攔截器類;配置攔截器的配置文件結構,并在攔截器配置文件中將攔截器配置到相應的執行路徑中去;在Struts啟動初始化時,讀取配置文件,解析得到配置文件中配置的攔截器,并初始化;當客戶端訪問網站時,服務器端根據路徑調用Struts Action類或者DispatchAction類時獲取攔截器,執行相應的攔截器方法,實現在Struts框架下面向切面編程的攔截。其實現類的攔截和對各個類中的實現方法而進行的攔截,具有很好的實用性。
            文檔編號G06F9/44GK101276271SQ20071006492
            公開日2008年10月1日 申請日期2007年3月29日 優先權日2007年3月29日
            發明者廖德生, 文福安, 李江濤 申請人:北京郵電大學
            網友詢問留言 已有0條留言
            • 還沒有人留言評論。精彩留言會獲得點贊!
            1
            婷婷六月激情在线综合激情,亚洲国产大片,久久中文字幕综合婷婷,精品久久久久久中文字幕,亚洲一区二区三区高清不卡,99国产精品热久久久久久夜夜嗨 ,欧美日韩亚洲综合在线一区二区,99国产精品电影,伊人精品线视天天综合,精品伊人久久久大香线蕉欧美
            亚洲精品1区 国产成人一级 91精品国产欧美一区二区 亚洲精品乱码久久久久久下载 国产精品久久久久久久伊一 九色国产 国产精品九九视频 伊人久久成人爱综合网 欧美日韩亚洲区久久综合 欧美日本一道免费一区三区 夜夜爽一区二区三区精品 欧美日韩高清一区二区三区 国产成人av在线 国产精品对白交换绿帽视频 国产视频亚洲 国产在线欧美精品 国产精品综合网 国产日韩精品欧美一区色 国产日韩精品欧美一区喷 欧美日韩在线观看区一二 国产区精品 欧美视频日韩视频 中文字幕天天躁日日躁狠狠躁97 视频一二三区 欧美高清在线精品一区二区不卡 国产精品揄拍一区二区久久 99久久综合狠狠综合久久aⅴ 亚洲乱码视频在线观看 日韩在线第二页 亚洲精品无码专区在线播放 成人亚洲网站www在线观看 欧美三级一区二区 99久久精品免费看国产高清 91麻豆国产在线观看 最新日韩欧美不卡一二三区 成人在线观看不卡 日韩国产在线 在线亚洲精品 亚洲午夜久久久久中文字幕 国产精品成人久久久久久久 精品国产一区二区在线观看 欧美精品国产一区二区三区 中文在线播放 亚洲第一页在线视频 国产午夜精品福利久久 九色国产 精品国产九九 国产永久视频 久久精品人人做人人综合试看 国产一区二区三区免费观看 亚洲精品国产电影 9999热视频 国产精品资源在线 麻豆久久婷婷国产综合五月 国产精品免费一级在线观看 亚洲国产一区二区三区青草影视 中文在线播放 国产成人综合在线 国产在线观看色 国产亚洲三级 国产片一区二区三区 久久99精品久久久久久牛牛影视 亚洲欧美日韩国产 四虎永久免费网站 国产一毛片 国产精品视频在 九九热在线精品 99精品福利视频 色婷婷色99国产综合精品 97成人精品视频在线播放 精品久久久久久中文字幕 亚洲欧美一区二区三区孕妇 亚洲欧美成人网 日韩高清在线二区 国产尤物在线观看 在线不卡一区二区 91网站在线看 韩国精品福利一区二区 欧美日韩国产成人精品 99热精品久久 国产精品免费视频一区 高清视频一区 精品九九久久 欧美日韩在线观看免费 91欧美激情一区二区三区成人 99福利视频 亚洲国产精品91 久热国产在线 精品久久久久久中文字幕女 国产精品久久久久久久久99热 成人自拍视频网 国产精品视频久久久久久 久久影院国产 国产玖玖在线观看 99精品在线免费 亚洲欧美一区二区三区导航 久久久久久久综合 国产欧美日韩精品高清二区综合区 国产精品视频自拍 亚洲一级片免费 久久久久久九九 国产欧美自拍视频 视频一区二区在线观看 欧美日韩一区二区三区久久 中文在线亚洲 伊人热人久久中文字幕 日韩欧美亚洲国产一区二区三区 欧美亚洲国产成人高清在线 欧美日韩国产码高清综合人成 国产性大片免费播放网站 亚洲午夜综合网 91精品久久一区二区三区 国产无套在线播放 国产精品视频网站 国产成人亚洲精品老王 91在线网站 国产视频97 欧美黑人欧美精品刺激 国产一区二区三区免费在线视频 久久久国产精品免费看 99re6久精品国产首页 久久精品91 国产成人一级 国产成人精品曰本亚洲 日本福利在线观看 伊人成综合网 久久综合一本 国产综合久久久久久 久久精品成人免费看 久久福利 91精品国产91久久久久久麻豆 亚洲精品成人在线 亚洲伊人久久精品 欧美日本二区 国产永久视频 国产一区二 一区二区福利 国产一毛片 亚洲精品1区 毛片一区二区三区 伊人久久大香线蕉综合影 国产欧美在线观看一区 亚洲国产欧洲综合997久久 国产一区二区免费视频 国产91精品对白露脸全集观看 久久亚洲国产伦理 欧美成人伊人久久综合网 亚洲性久久久影院 久久99国产精一区二区三区! 91精品国产欧美一区二区 欧美日韩亚洲区久久综合 日韩精品一二三区 久久久夜色精品国产噜噜 国产在线精品福利91香蕉 久久久久久久亚洲精品 97se色综合一区二区二区 91国语精品自产拍在线观看性色 91久久国产综合精品女同我 日韩中文字幕a 国产成人亚洲日本精品 久久国产精品-国产精品 久久国产经典视频 久久国产精品伦理 亚洲第一页在线视频 国产精品久久久久三级 日韩毛片网 久久免费高清视频 麻豆国产在线观看一区二区 91麻豆国产福利在线观看 国产成人精品男人的天堂538 一区二区三区中文字幕 免费在线视频一区 欧美日韩国产成人精品 国产综合网站 国产资源免费观看 亚洲精品亚洲人成在线播放 精品久久久久久中文字幕专区 亚洲人成人毛片无遮挡 国产一起色一起爱 国产香蕉精品视频在 九九热免费观看 日韩亚洲欧美一区 九九热精品在线观看 精品久久久久久中文字幕专区 亚洲欧美自拍偷拍 国产精品每日更新 久久久久国产一级毛片高清板 久久天天躁狠狠躁夜夜中文字幕 久久精品片 日韩在线毛片 国产成人精品本亚洲 国产成人精品一区二区三区 九九热在线观看 国产r级在线观看 国产欧美日韩精品高清二区综合区 韩国电影一区二区 国产精品毛片va一区二区三区 五月婷婷伊人网 久久一区二区三区免费 一本色道久久综合狠狠躁篇 亚洲综合色站 国产尤物在线观看 亚洲一区亚洲二区 免费在线视频一区 欧洲精品视频在线观看 日韩中文字幕a 中文字幕日本在线mv视频精品 91精品在线免费视频 精品国产免费人成在线观看 精品a级片 中文字幕日本在线mv视频精品 日韩在线精品视频 婷婷丁香色 91精品国产高清久久久久 国产成人精品日本亚洲直接 五月综合视频 欧美日韩在线亚洲国产人 精液呈暗黄色 亚洲乱码一区 久久精品中文字幕不卡一二区 亚洲天堂精品在线 激情婷婷综合 国产免费久久精品久久久 国产精品亚洲二区在线 久久免费播放视频 五月婷婷丁香综合 在线亚洲欧美日韩 久久免费精品高清麻豆 精品久久久久久中文字幕 亚洲一区网站 国产精品福利社 日韩中文字幕免费 亚洲综合丝袜 91精品在线播放 国产精品18 亚洲日日夜夜 伊人久久大香线蕉综合影 亚洲精品中文字幕乱码影院 亚洲一区二区黄色 亚洲第一页在线视频 一区二区在线观看视频 国产成人福利精品视频 亚洲高清二区 国内成人免费视频 精品亚洲性xxx久久久 国产精品合集一区二区三区 97av免费视频 国产一起色一起爱 国产区久久 国产资源免费观看 99精品视频免费 国产成人一级 国产精品九九免费视频 欧美91精品久久久久网免费 99热国产免费 久久精品色 98精品国产综合久久 久久精品播放 中文字幕视频免费 国产欧美日韩一区二区三区在线 精品久久蜜桃 国产小视频精品 一本色道久久综合狠狠躁篇 91在线免费观看 亚洲精品区 伊人成综合网 伊人热人久久中文字幕 伊人黄色片 99国产精品热久久久久久夜夜嗨 久久免费精品视频 亚洲一区二区三区高清不卡 久久久久国产一级毛片高清板 国产片一区二区三区 久久狠狠干 99久久婷婷国产综合精品电影 国产99区 国产精品成人久久久久 久久狠狠干 青青国产在线观看 亚洲高清国产拍精品影院 国产精品一区二区av 九九热在线免费视频 伊人久久国产 国产精品久久久久久久久久一区 在线观看免费视频一区 国产精品自在在线午夜区app 国产精品综合色区在线观看 国产毛片久久久久久国产毛片 97国产免费全部免费观看 国产精品每日更新 国产尤物视频在线 九九视频这里只有精品99 一本一道久久a久久精品综合 久久综合给会久久狠狠狠 国产成人精品男人的天堂538 欧美一区二区高清 毛片一区二区三区 国产欧美日韩在线观看一区二区三区 在线国产二区 欧美不卡网 91在线精品中文字幕 在线国产福利 国内精品91久久久久 91亚洲福利 日韩欧美国产中文字幕 91久久精品国产性色也91久久 亚洲性久久久影院 欧美精品1区 国产热re99久久6国产精品 九九热免费观看 国产精品欧美日韩 久久久久国产一级毛片高清板 久久国产经典视频 日韩欧美亚洲国产一区二区三区 欧美亚洲综合另类在线观看 国产精品自在在线午夜区app 97中文字幕在线观看 视频一二三区 精品国产一区在线观看 国产欧美日韩在线一区二区不卡 欧美一区二三区 伊人成人在线观看 国内精品91久久久久 97在线亚洲 国产在线不卡一区 久久久全免费全集一级全黄片 国产精品v欧美精品∨日韩 亚洲毛片网站 在线不卡一区二区 99re热在线视频 久久激情网 国产毛片一区二区三区精品 久久亚洲综合色 中文字幕视频免费 国产视频亚洲 婷婷伊人久久 国产一区二区免费播放 久久99国产精品成人欧美 99国产在线视频 国产成人免费视频精品一区二区 国产不卡一区二区三区免费视 国产码欧美日韩高清综合一区 久久精品国产主播一区二区 国产一区电影 久久精品国产夜色 国产精品国产三级国产 日韩一区二区三区在线 久久97久久97精品免视看 久久国产免费一区二区三区 伊人久久大香线蕉综合电影网 99re6久精品国产首页 久久激情网 亚洲成人高清在线 国产精品网址 国产成人精品男人的天堂538 香蕉国产综合久久猫咪 国产专区中文字幕 91麻豆精品国产高清在线 久久国产经典视频 国产精品成人va在线观看 国产精品爱啪在线线免费观看 日本精品久久久久久久久免费 亚洲综合一区二区三区 久久五月网 精品国产网红福利在线观看 久久综合亚洲伊人色 亚洲国产精品久久久久久网站 在线日韩国产 99国产精品热久久久久久夜夜嗨 国产综合精品在线 国产区福利 精品亚洲综合久久中文字幕 国产制服丝袜在线 毛片在线播放网站 在线观看免费视频一区 国产精品久久久精品三级 亚洲国产电影在线观看 最新日韩欧美不卡一二三区 狠狠综合久久综合鬼色 日本精品1在线区 国产日韩一区二区三区在线播放 欧美日韩精品在线播放 亚洲欧美日韩国产一区二区三区精品 久久综合久久网 婷婷六月激情在线综合激情 亚洲乱码一区 国产专区91 97av视频在线观看 精品久久久久久中文字幕 久久五月视频 国产成人福利精品视频 国产精品网址 中文字幕视频在线 精品一区二区三区免费视频 伊人手机在线视频 亚洲精品中文字幕乱码 国产在线视频www色 色噜噜国产精品视频一区二区 精品亚洲成a人在线观看 国产香蕉尹人综合在线 成人免费一区二区三区在线观看 国产不卡一区二区三区免费视 欧美精品久久天天躁 国产专区中文字幕 久久精品国产免费中文 久久精品国产免费一区 久久无码精品一区二区三区 国产欧美另类久久久精品免费 欧美精品久久天天躁 亚洲精品在线视频 国产视频91在线 91精品福利一区二区三区野战 日韩中文字幕免费 国产精品99一区二区三区 欧美成人高清性色生活 国产精品系列在线观看 亚洲国产福利精品一区二区 国产成人在线小视频 国产精品久久久久免费 99re热在线视频 久久久久久久综合 一区二区国产在线播放 成人国产在线视频 亚洲精品乱码久久久久 欧美日韩一区二区综合 精品久久久久免费极品大片 中文字幕视频二区 激情粉嫩精品国产尤物 国产成人精品一区二区视频 久久精品中文字幕首页 亚洲高清在线 国产精品亚洲一区二区三区 伊人久久艹 中文在线亚洲 国产精品一区二区在线播放 国产精品九九免费视频 亚洲二区在线播放 亚洲狠狠婷婷综合久久久久网站 亚洲欧美日韩网站 日韩成人精品 亚洲国产一区二区三区青草影视 91精品国产福利在线观看 国产精品久久久久久久久99热 国产一区二区精品尤物 久碰香蕉精品视频在线观看 亚洲日日夜夜 在线不卡一区二区 国产午夜亚洲精品 九九热在线视频观看这里只有精品 伊人手机在线视频 91免费国产精品 日韩欧美中字 91精品国产91久久久久 国产全黄三级播放 视频一区二区三区免费观看 国产开裆丝袜高跟在线观看 国产成人欧美 激情综合丝袜美女一区二区 国产成人亚洲综合无 欧美精品一区二区三区免费观看 欧美亚洲国产日韩 日韩亚州 国产欧美日韩精品高清二区综合区 亚洲午夜国产片在线观看 精品久久久久久中文字幕 欧美精品1区 久久伊人久久亚洲综合 亚洲欧美日韩精品 国产成人精品久久亚洲高清不卡 久久福利影视 国产精品99精品久久免费 久久久久免费精品视频 国产日产亚洲精品 亚洲国产午夜电影在线入口 精品无码一区在线观看 午夜国产精品视频 亚洲一级片免费 伊人久久大香线蕉综合影 国产精品久久影院 久碰香蕉精品视频在线观看 www.欧美精品 在线小视频国产 亚洲国产天堂久久综合图区 欧美一区二区三区不卡 日韩美女福利视频 九九精品免视频国产成人 不卡国产00高中生在线视频 亚洲第一页在线视频 欧美日韩在线播放成人 99re视频这里只有精品 国产精品91在线 精品乱码一区二区三区在线 国产区久久 91麻豆精品国产自产在线观看一区 日韩精品成人在线 九九热在线观看 国产精品久久不卡日韩美女 欧美一区二区三区综合色视频 欧美精品免费一区欧美久久优播 国产精品网址 国产专区中文字幕 国产精品欧美亚洲韩国日本久久 日韩美香港a一级毛片 久久精品123 欧美一区二区三区免费看 99r在线视频 亚洲精品国产字幕久久vr 国产综合激情在线亚洲第一页 91免费国产精品 日韩免费小视频 亚洲国产精品综合一区在线 国产亚洲第一伦理第一区 在线亚洲精品 国产精品一区二区制服丝袜 国产在线成人精品 九九精品免视频国产成人 亚洲国产网 欧美日韩亚洲一区二区三区在线观看 在线亚洲精品 欧美一区二区三区高清视频 国产成人精品男人的天堂538 欧美日韩在线观看区一二 亚洲欧美一区二区久久 久久精品中文字幕首页 日本高清www午夜视频 久久精品国产免费 久久999精品 亚洲国产精品欧美综合 88国产精品视频一区二区三区 91久久偷偷做嫩草影院免费看 国产精品夜色视频一区二区 欧美日韩导航 国产成人啪精品午夜在线播放 一区二区视频在线免费观看 99久久精品国产自免费 精液呈暗黄色 久久99国产精品 日本精品久久久久久久久免费 精品国产97在线观看 99re视频这里只有精品 国产视频91在线 999av视频 亚洲美女视频一区二区三区 久久97久久97精品免视看 亚洲国产成人久久三区 99久久亚洲国产高清观看 日韩毛片在线视频 综合激情在线 91福利一区二区在线观看 一区二区视频在线免费观看 激情粉嫩精品国产尤物 国产成人精品曰本亚洲78 国产成人精品本亚洲 国产精品成人免费视频 国产成人啪精品视频免费软件 久久精品国产亚洲妲己影院 国产精品成人久久久久久久 久久大香线蕉综合爱 欧美一区二区三区高清视频 99热国产免费 在线观看欧美国产 91精品视频在线播放 国产精品福利社 欧美精品一区二区三区免费观看 国产一区二区免费视频 国产午夜精品一区二区 精品视频在线观看97 91精品福利久久久 国产一区福利 国产综合激情在线亚洲第一页 国产精品久久久久久久久久久不卡 九色国产 在线日韩国产 黄网在线观看 亚洲一区小说区中文字幕 中文字幕丝袜 日本二区在线观看 日本国产一区在线观看 欧美日韩一区二区三区久久 欧美精品亚洲精品日韩专 国产日产亚洲精品 久久综合九色综合欧美播 亚洲国产欧美无圣光一区 欧美视频区 亚洲乱码视频在线观看 久久无码精品一区二区三区 九九热精品免费视频 久久99精品久久久久久牛牛影视 国产精品成久久久久三级 国产一区福利 午夜国产精品视频 日本二区在线观看 99久久网站 国产亚洲天堂 精品国产一区二区三区不卡 亚洲国产日韩在线一区 国产成人综合在线观看网站 久久免费高清视频 欧美在线导航 午夜精品久久久久久99热7777 欧美久久综合网 国产小视频精品 国产尤物在线观看 亚洲国产精品综合一区在线 欧美一区二区三区不卡视频 欧美黑人欧美精品刺激 日本福利在线观看 久久国产偷 国产手机精品一区二区 国产热re99久久6国产精品 国产高清啪啪 欧美亚洲国产成人高清在线 国产在线第三页 亚洲综合一区二区三区 99r在线视频 99精品久久久久久久婷婷 国产精品乱码免费一区二区 国产在线精品福利91香蕉 国产尤物视频在线 五月婷婷亚洲 中文字幕久久综合伊人 亚洲精品一级毛片 99国产精品电影 在线视频第一页 久久99国产精品成人欧美 国产白白视频在线观看2 成人精品一区二区www 亚洲成人网在线观看 麻豆91在线视频 色综合合久久天天综合绕视看 久久精品国产免费高清 国产不卡一区二区三区免费视 欧美国产中文 99精品欧美 九九在线精品 国产中文字幕在线免费观看 国产一区中文字幕在线观看 国产成人一级 国产精品一区二区制服丝袜 国产一起色一起爱 亚洲精品成人在线 亚洲欧美精品在线 国产欧美自拍视频 99精品久久久久久久婷婷 久99视频 国产热re99久久6国产精品 视频一区亚洲 国产精品视频分类 国产精品成在线观看 99re6久精品国产首页 亚洲在成人网在线看 亚洲国产日韩在线一区 久久国产三级 日韩国产欧美 欧美在线一区二区三区 国产精品美女一级在线观看 成人午夜免费福利视频 亚洲天堂精品在线 91精品国产手机 欧美日韩视频在线播放 狠狠综合久久综合鬼色 九一色视频 青青视频国产 亚洲欧美自拍一区 中文字幕天天躁日日躁狠狠躁97 日韩免费大片 996热视频 伊人成综合网 亚洲天堂欧美 日韩精品亚洲人成在线观看 久久综合给会久久狠狠狠 日韩精品亚洲人成在线观看 日韩国产欧美 亚洲成aⅴ人片在线影院八 亚洲精品1区 99久久精品免费 国产精品高清在线观看 国产精品久久久免费视频 在线亚洲欧美日韩 91在线看视频 国产精品96久久久久久久 欧美日韩国产成人精品 91在线亚洲 热久久亚洲 国产精品美女免费视频观看 日韩在线毛片 亚洲永久免费视频 九九免费在线视频 亚洲一区网站 日本高清二区视频久二区 精品国产美女福利在线 伊人久久艹 国产精品久久久久三级 欧美成人精品第一区二区三区 99久久精品国产自免费 在线观看日韩一区 国产中文字幕一区 成人免费午夜视频 欧美日韩另类在线 久久99国产精品成人欧美 色婷婷中文网 久久天天躁夜夜躁狠狠躁2020 欧美成人伊人久久综合网 国产精品福利资源在线 国产伦精品一区二区三区高清 国产精品亚洲综合色区韩国 亚洲一区欧美日韩 色综合视频 国语自产精品视频在线区 国产高清a 成人国内精品久久久久影 国产在线精品香蕉综合网一区 国产不卡在线看 国产成人精品精品欧美 国产欧美日韩综合精品一区二区三区 韩国电影一区二区 国产在线视频www色 91中文字幕在线一区 国产人成午夜免视频网站 亚洲综合一区二区三区 色综合视频一区二区观看 久久五月网 九九热精品在线观看 国产一区二区三区国产精品 99久热re在线精品996热视频 亚洲国产网 在线视频亚洲一区 日韩字幕一中文在线综合 国产高清一级毛片在线不卡 精品国产色在线 国产高清视频一区二区 精品日本久久久久久久久久 亚洲国产午夜精品乱码 成人免费国产gav视频在线 日韩欧美一区二区在线观看 欧美曰批人成在线观看 韩国电影一区二区 99re这里只有精品6 日韩精品一区二区三区视频 99re6久精品国产首页 亚洲欧美一区二区三区导航 欧美色图一区二区三区 午夜精品视频在线观看 欧美激情在线观看一区二区三区 亚洲热在线 成人国产精品一区二区网站 亚洲一级毛片在线播放 亚洲一区小说区中文字幕 亚洲午夜久久久久影院 国产自产v一区二区三区c 国产精品视频免费 久久调教视频 国产成人91激情在线播放 国产精品欧美亚洲韩国日本久久 久久亚洲日本不卡一区二区 91中文字幕网 成人国产在线视频 国产视频91在线 欧美成人精品第一区二区三区 国产精品福利在线 久久综合九色综合精品 欧美一区二区三区精品 久久国产综合尤物免费观看 久久99青青久久99久久 日韩精品免费 久久国产精品999 91亚洲视频在线观看 国产精品igao视频 色综合区 在线亚洲欧国产精品专区 国产一区二区三区在线观看视频 亚洲精品成人在线 一区二区国产在线播放 中文在线亚洲 亚洲精品第一国产综合野 国产一区二区精品久久 一区二区三区四区精品视频 99热精品久久 中文字幕视频二区 国产成人精品男人的天堂538 99精品影视 美女福利视频一区二区 久久午夜夜伦伦鲁鲁片 综合久久久久久久综合网 国产精品国产欧美综合一区 国产99视频在线观看 国产亚洲女在线精品 婷婷影院在线综合免费视频 国产亚洲3p一区二区三区 91成人爽a毛片一区二区 亚洲一区二区高清 国产欧美亚洲精品第二区首页 欧美日韩导航 亚洲高清二区 欧美激情观看一区二区久久 日韩毛片在线播放 亚洲欧美日韩高清中文在线 亚洲日本在线播放 国产精品一区二区制服丝袜 精品国产一区二区三区不卡 国产不卡在线看 国产欧美网站 四虎永久在线观看视频精品 国产黄色片在线观看 夜夜综合 一本色道久久综合狠狠躁篇 欧美亚洲综合另类在线观看 国产91在线看 伊人久久国产 欧美一区二区在线观看免费网站 国产精品久久久久三级 久久福利 日韩中文字幕a 亚洲午夜久久久久影院 91在线高清视频 国产亚洲一区二区三区啪 久久人精品 国产精品亚洲午夜一区二区三区 综合久久久久久 久久伊人一区二区三区四区 国产综合久久久久久 日韩一区精品视频在线看 国产精品日韩欧美制服 日本精品1在线区 99re视频 无码av免费一区二区三区试看 国产视频1区 日韩欧美中文字幕一区 日本高清中文字幕一区二区三区a 亚洲国产欧美无圣光一区 国产在线视频一区二区三区 欧美国产第一页 在线亚洲欧美日韩 日韩中文字幕第一页 在线不卡一区二区 伊人久久青青 国产精品一区二区在线播放 www.五月婷婷 麻豆久久婷婷国产综合五月 亚洲精品区 久久国产欧美另类久久久 99在线视频免费 伊人久久中文字幕久久cm 久久精品成人免费看 久久这里只有精品首页 88国产精品视频一区二区三区 中文字幕日本在线mv视频精品 国产在线精品成人一区二区三区 伊人精品线视天天综合 亚洲一区二区黄色 国产尤物视频在线 亚洲精品99久久久久中文字幕 国产一区二区三区免费观看 伊人久久大香线蕉综合电影网 国产成人精品区在线观看 日本精品一区二区三区视频 日韩高清在线二区 久久免费播放视频 一区二区成人国产精品 国产精品免费精品自在线观看 亚洲精品视频二区 麻豆国产精品有码在线观看 精品日本一区二区 亚洲欧洲久久 久久中文字幕综合婷婷 中文字幕视频在线 国产成人精品综合在线观看 91精品国产91久久久久福利 精液呈暗黄色 香蕉国产综合久久猫咪 国产专区精品 亚洲精品无码不卡 国产永久视频 亚洲成a人片在线播放观看国产 一区二区国产在线播放 亚洲一区二区黄色 欧美日韩在线观看视频 亚洲精品另类 久久国产综合尤物免费观看 国产一区二区三区国产精品 高清视频一区 国产精品igao视频 国产精品资源在线 久久综合精品国产一区二区三区 www.五月婷婷 精品色综合 99热国产免费 麻豆福利影院 亚洲伊人久久大香线蕉苏妲己 久久电影院久久国产 久久精品伊人 在线日韩理论午夜中文电影 亚洲国产欧洲综合997久久 伊人国产精品 久草国产精品 欧美一区精品二区三区 亚洲成人高清在线 91免费国产精品 日韩精品福利在线 国产一线在线观看 国产不卡在线看 久久99青青久久99久久 亚洲精品亚洲人成在线播放 99久久免费看国产精品 国产日本在线观看 青草国产在线视频 麻豆久久婷婷国产综合五月 国产中文字幕一区 91久久精品国产性色也91久久 国产一区a 国产欧美日韩成人 国产亚洲女在线精品 一区二区美女 中文字幕在线2021一区 在线小视频国产 久久这里只有精品首页 国产在线第三页 欧美日韩中文字幕 在线亚洲+欧美+日本专区 精品国产一区二区三区不卡 久久这里精品 欧美在线va在线播放 精液呈暗黄色 91精品国产手机 91在线免费播放 欧美视频亚洲色图 欧美国产日韩精品 日韩高清不卡在线 精品视频免费观看 欧美日韩一区二区三区四区 国产欧美亚洲精品第二区首页 亚洲韩精品欧美一区二区三区 国产精品视频免费 在线精品小视频 久久午夜夜伦伦鲁鲁片 国产无套在线播放 久热这里只精品99re8久 欧美久久久久 久久香蕉国产线看观看精品蕉 国产成人精品男人的天堂538 亚洲人成网站色7799在线观看 日韩在线第二页 一本色道久久综合狠狠躁篇 国产一区二区三区不卡在线观看 亚洲乱码在线 在线观看欧美国产 久久福利青草精品资源站免费 国产玖玖在线观看 在线亚洲精品 亚洲成aⅴ人在线观看 精品91在线 欧美一区二三区 日韩中文字幕视频在线 日本成人一区二区 日韩免费专区 国内精品在线观看视频 久久国产综合尤物免费观看 国产精品系列在线观看 一本一道久久a久久精品综合 亚洲免费播放 久久精品国产免费 久久人精品 亚洲毛片网站 亚洲成a人一区二区三区 韩国福利一区二区三区高清视频 亚洲精品天堂在线 一区二区三区中文字幕 亚洲国产色婷婷精品综合在线观看 亚洲国产成人久久笫一页 999国产视频 国产精品香港三级在线电影 欧美日韩一区二区三区四区 日韩国产欧美 国产精品99一区二区三区 午夜国产精品理论片久久影院 亚洲精品中文字幕麻豆 亚洲国产高清视频 久久免费手机视频 日韩a在线观看 五月婷婷亚洲 亚洲精品中文字幕麻豆 中文字幕丝袜 www国产精品 亚洲天堂精品在线 亚洲乱码一区 国产日韩欧美三级 久久999精品 伊人热人久久中文字幕 久热国产在线视频 国产欧美日韩在线观看一区二区三区 国产一二三区在线 日韩国产欧美 91精品国产91久久久久 亚洲一区小说区中文字幕 精品一区二区免费视频 国产精品视频免费 国产精品亚洲综合色区韩国 亚洲国产精品成人午夜在线观看 欧美国产日韩精品 中文字幕精品一区二区精品