拦截器的配置详解:
a) 当执行了自定义拦截器时候,默认拦截器将不会自动加载
b) 默认拦截器:在Struts-default.xml中,配置了默认拦截器。当配置默认拦截器以后,如果不引用拦截器,那么默认的拦截器将起作用。
<default-interceptor-ref name="defaultStack"/>
c) 当引用了自定义拦截器后,又想使用struts2提供的拦截器功能,需要手动引用一下
d) 当action应用的拦截器个数比较多时,可以将多个拦截器放入一个拦截器栈中
<interceptors >
<interceptor name="time" class="cn.xm.interceptor.TimeInterceptor"></interceptor>
<!-- 拦截器栈 一个拦截器栈可以包含多个拦截器的引用-->
<interceptor-stack name="mystack">
<!-- 引用拦截器 -->
<interceptor-ref name="time"/>
<!-- 引用默认拦截器 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
下面是一个登录拦截器的实例:
1、建立登录拦截器的类Logininterceptor(拦截器的实现有两种方式,实现interceptor接口或者继承Abstractinterceptor类)此处选择实现interceptor接口,重写了intercept方法,通过getProxy().getActionName();判断session中是否存在用户登录后的对象,若存在则完成登录验证,否则回到登录界面
package cn.xm.interceptor;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class Logininterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
Object obj = invocation.getInvocationContext().getSession().get("user");
System.out.println(obj);
if(obj == null) {
System.out.println("obj = null");
return Action.LOGIN;
}
System.out.println(actionname);
return invocation.invoke();
}
}
2、配置struts.xml
<package name="default" namespace="/" extends="struts-default">
<!-- 配置拦截器 -->
<interceptors >
<interceptor name="logininterceptor" class="cn.xm.interceptor.Logininterceptor">
</interceptor>
</interceptors>
<action name="Hello" class="cn.xm.action.HelloAction">
<result name = "success">show.jsp</result>
<!-- 引用拦截器 -->
<interceptor-ref name="logininterceptor"/>
<!-- 引用默认拦截器 -->
<interceptor-ref name="defaultStack"/>
</action>
</package>