一旦在项目里用到Struts,那么拦截器出现的概率相当大。
在一般应用里,一个拦截器只承担拦截特定请求的功能,可以定义多个拦截器来拦截不同的请求。
使用拦截器需要定义一个拦截器,比如下面是一个对登录功能进行拦截的拦截器。
public class UserLoginInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation arg0) throws Exception {
if(LoginAction.class==arg0.getAction().getClass()) {
return arg0.invoke();
}
Map sessionMap =arg0.getInvocationContext().getSession();
if(null==sessionMap.get("username")) {
System.out.println("in Logininterceptor,the Username is null.");
return Action.LOGIN;
}
return arg0.invoke();
}
}
LoginAction.class返回LoginAction的类型类,arg0.getAction().getClass()返回对象arg0的类的类型类。
判断他们是否相等,
相等表示请求来自于登录界面(login)则返回arg0.invoke(),即不做任何事情。
struts.xml中拦截器的定义
<package name="interceptLogin" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="loginCheck" class="action.UserLoginInterceptor"></tinerceptor>
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="loginCheck"/>
<interceptor-ref name="defaultStack">
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"/>
</package>