使用攔截器的方法過濾特性

scalad發表於2015-05-10
        如果我們希望對Action中的部分方法實現攔截,Struts2為了實現方法過濾的功能,定義了一個名為MethodFilterInterceptor的類,該類繼承了AbstractInterceptor。若想自定義的攔截器能夠實現方法過濾的功能可以繼承MethodFilterInterceptor類,該類重寫了父類AbstractInterceptor的intercept方法,又提供了一個doIntercept的抽象方法,在此方法中使用者可以自定義攔截器。
MethodFilterInterceptor提供了兩個非常重要的方法,用於方法的過濾:
setIncludeMethods(String includeMethods)
setExcludeMethods(String excludeMethods),
setExcludeMethods的主要的作用是排除要過濾的方法,例如setExcludeMethods("execute"),這樣Action的execute方法將不會被攔截,
setIncludeMethods方法正好相反,setIncludeMethods("execute"),這樣execute方法將被攔截。


       以硬編碼的形式設定要過濾的方法的靈活性不夠,因襲可以通過struts.xml配置檔案來設定方法是否過濾是不錯的選擇:
<interceptor name="FilterhelloInterceptor">
    <param name="excludeMethods">execute</param>
</interceptor>
struts.xml是通過屬性來設定的,name="excludeMethods"表示要新增排除過濾的方法,當前配置的攔截過濾的方法時execute方法。若要排除多個方法,則使用都好分開
<interceptor name="FilterhelloInterceptor">
    <param name="excludeMethods">execute,aa,bb,cc,dd</param>
</interceptor>
以上的配置過濾掉了execute,aa,bb,cc,dd方法,這些方法不會被攔截器所攔截。


也可以使用includeMethods引數指定要攔截的方法名。
<interceptor name="FilterhelloInterceptor">
    <param name="includeMethods">execute,aa,bb,cc,dd</param>
</interceptor>


下面給出一段繼承自MethodsFilterInterceptor類的自定義攔截器
package com.inter;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class FilterhelloInterceptor extends MethodFilterInterceptor {
 
private static final long serialVersionUID = 1L;

@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
        System.out.println("using the MethodFilterInterceptor...");
        String result = invocation.invoke();
        return result;
}
public void setExcludeMethods(String excludeMethods){
super.setExcludeMethods(excludeMethods);
}
        @Override
public void setIncludeMethods(String includeMethods) {
super.setIncludeMethods(includeMethods);
}
}

相關文章