1. 程式人生 > 其它 >struts2關於action攔截器使用方法 現記錄如下

struts2關於action攔截器使用方法 現記錄如下

struts2關於action攔截器使用方法 現記錄如下 以便將來取用

struts2 與springhibernate整合

struts2中攔截action

業務要求:

後臺輸入

http://localhost:8080/mia/mia-admin/mia-login.jsp 為登入頁面

驗證使用者名稱和密碼 正確則進入後臺試圖 ,但退出時 ,複製後臺某個頁面地址, 在瀏覽器輸入回車 ,則轉入登入頁面

http://localhost:8080/mia/mia-admin/addarticleURL.action

現在使用

Struts2自定義攔截器

所有的Struts 2的攔截器都直接或間接實現介面com.opensymphony.xwork2.interceptor.Interceptor。該介面提供了三個方法:

1) void init(); 在該攔截器被初始化之後,在該攔截器執行攔截之前,系統回撥該方法。對於每個攔截器而言,此方法只執行一次。

2) void destroy();該方法跟init()方法對應。在攔截器例項被銷燬之前,系統將回調該方法。

3) String intercept(ActionInvocation invocation) throws Exception; 該方法是使用者需要實現的攔截動作。該方法會返回一個字串作為邏輯檢視。

除此之外,繼承類com.opensymphony.xwork2.interceptor.AbstractInterceptor是更簡單的一種實現攔截器類的方式,因為此類提供了init()和destroy()方法的空實現,這樣我們只需要實現intercept方法。

<interceptor …>元素來定義攔截器

<interceptor-ref …>元素來使用攔截器。

使用自定義攔截器來完成使用者許可權的控制:當瀏覽者需要請求執行某個操作時,應用需要先檢查瀏覽者是否登入,以及是否有足夠的許可權來執行該操作。

AuthorityInterceptor.Java copy

  1. package com.mia.util;
  2. import java.util.Map;
  3. import com.opensymphony.xwork2.Action;
  4. import com.opensymphony.xwork2.ActionContext;
  5. import com.opensymphony.xwork2.ActionInvocation;
  6. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  7. @SuppressWarnings("rawtypes")
  8. public class AuthorityInterceptor extends AbstractInterceptor {
  9. private static final long serialVersionUID = 1358600090729208361L;
  10. //攔截Action處理的攔截方法
  11. @Override
  12. public String intercept(ActionInvocation invocation) throws Exception {
  13. // 取得請求相關的ActionContext例項
  14. ActionContext context=invocation.getInvocationContext();
  15. Map session=context.getSession();
  16. //取出名為user的session屬性
  17. String user=(String)session.get("username");
  18. //如果沒有登陸,或者登陸所有的使用者名稱不是mia,都返回重新登陸
  19. if(user!=null && user.equals("mia")){
  20. System.out.println("合法使用者");
  21. return invocation.invoke();
  22. } else {
  23. //沒有登陸,將伺服器提示設定成一個HttpServletRequest屬性
  24. context.put("tip","您還沒有登入,請登陸系統");
  25. return Action.LOGIN;
  26. }
  27. }
  28. }

由於我後臺是一個使用者 所以這裡我限定死了 為mia

配置許可權控制攔截器

struts.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
 
 <package name="articleURL" extends="struts-default"> 
 
 <interceptors> 
 <!-- 定義許可權攔截器 --> 
 <interceptor name="authority" class="com.mia.util.AuthorityInterceptor"></interceptor> 
 
 <!-- 定義一個包含許可權許可權攔截器 --> 
 <interceptor-stack name="mydefault"> 
 <interceptor-ref name="defaultStack"/> 
 <interceptor-ref name="authority"/> 
 </interceptor-stack> 
 </interceptors> 
 
 <!-- 定義預設攔截器 --> 
 <default-interceptor-ref name="mydefault"/> 
 
 <!-- 定義全域性處理結局 --> 
 <global-results> 
 <result name="login">/mia-login.jsp</result> 
 </global-results> 
 
 
 
 
 <action name="addarticleURL" class="AddarticleURL" method="publisharticleURL"> 
 <result name="success" >/mia-admin/public/article/add.jsp</result> 
 
 </action> 
 
 </package> 
 
 
</struts> 

一旦在某個包下定義了預設攔截器棧,在該包下的所有action都會使用此攔截器棧。對於那些不想使用些攔截器棧的action,則應該將它放置在其它的包下。

執行除錯

在瀏覽器位址列直接輸入http://localhost:8080/mia/mia-admin/addarticleURL.action來訪問,此動作配置了許可權攔截器,所有被轉到登入頁面

登入後 就會登入到後臺了

當然也可以不用配成攔截器棧

<!DOCTYPE struts PUBLIC  
 
       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
 
       "http://struts.apache.org/dtds/struts-2.0.dtd"> 
 
lt;struts> 
 
 <package name="my" extends="struts-default"> 
 
 
 
 <interceptors> 
 
 <!-- 定義許可權控制攔截器 --> 
 
 <interceptor name="authority" class=" com.mia.util.AuthorityInterceptor"/> 
 
 </interceptors> 
 
 
 
 <!-- 定義全域性處理結果 --> 
 
 <global-results> 
 
 <!-- 邏輯名為login的結果,對映到/login.jsp頁面 --> 
 
 <result name="login">/mia-login.jsp</result> 
 
 </global-results> 
 
 
 
 <action name="addarticleURL" class="AddarticleURL" method="publisharticleURL"> 
 <result name="success" >/mia-admin/public/article/add.jsp</result> 
 <!-- 使用攔截器 --> 
 
 <interceptor-ref name="defaultStack"/> 
 
 <interceptor-ref name="authority"/> 
 
 </action> 
 
 
 
 </package> 
 
lt;/struts>