Struts2 拦截器过滤方法(二十八)

1.默认情况下,如果为某个Action配置拦截器,则这个拦截器将拦截Action中的所有方法。但是有时候并不是想拦截Action中的所有方法,而是值需要拦截其中某一个,或者某几个方法,此时就需要使用拦截器的方法过滤特性了。

为了实现拦截器的方法过滤特性,Struts2提供了一个MethodFiledInterceptor抽象类。这个类重写了AbstractInterceptor类中的interceptor()方法,并且提供了doInteceptor(ActionInvocation invocation)抽象方法。

2,方法过滤参数
excluedMethods:执行拦截器拒绝拦截的方法列表,如果有多个方法名之间使用英文“,”分割,例如指定该参数值为login,register 那么拦截器将不会拦截login()he register()方法。

includeMethods:指定拦截器需要拦截的方法,如果有多个方法,则用英文“,”分割。例如指定该参数值为 method1,method2,那么拦截器将拦截method1和method2方法();


定义拦截器类
package com.sh.interceptor;

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

public class MethodInterceptor extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("拦截器起作用了!");
		return invocation.invoke();
	}
}


action
package com.sh.action;

import com.opensymphony.xwork2.ActionSupport;

public class MethodAction extends ActionSupport{
	public String execute(){
		System.out.println("execute()执行了!");
		return SUCCESS;
	}
	
	public String login(){
		System.out.println("login()方法执行!");
		return SUCCESS;
	}
	
	public String register(){
		System.out.println("register()方法");
		return SUCCESS;
	}
}


struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

	<!-- 修改请求的后缀名为.do 修改后每个请求必须要有后缀了-->
	<constant name="struts.action.extension" value="do,action"/>
	<!-- 对于 采用 "!方法名"这种方法有用 ,采用通配符就不需要设置这个了 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 
	<!-- 默认的视图主题 <constant name="struts.ui.theme" value="simple"/>-->
	
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="methodInterceptor"
			class="com.sh.interceptor.MethodInterceptor"/>
		</interceptors>
		<action name="method" class="com.sh.action.MethodAction">
			<result>/success.jsp</result>
			<result name="login">/login.jsp</result>
			<interceptor-ref name="methodInterceptor">
				<param name="excludeMethods">execute</param>
				<!--<param name="includeMethods">execute</param>  -->
			</interceptor-ref>
			<interceptor-ref name="defaultStack"/>
		</action>
	</package>
	
</struts>



--访问地址
http://localhost:8080/Struts2_inteceptorMethod/method!login.action
可以看到拦截器没有拦截
http://localhost:8080/Struts2_inteceptorMethod/method.action
可以看到拦截器拦截了

你可能感兴趣的:(doIntercept,拦截指定的方法)