您的位置:首页 > 其它

使用拦截器的方法过滤特性

2015-05-10 16:59 288 查看
如果我们希望对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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: