拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的。(注:拦截器只能拦截action,比如,验证用户是否登录)
配置如下:
1.首先建立一个自定义的拦截器,比如LoginInterceptor。
public class LoginInterceptor extends MethodFilterInterceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
System.out.println("This is the MethodFilterInterceptor!");
System.out.println(invocation.getProxy().getMethod());
Map sessionMap = invocation.getInvocationContext().getSession();
if(null == sessionMap.get("userInfo")) {
return Action.INPUT;
}
return invocation.invoke();
}
这里采用继承MethodFilterInterceptor 的方法,当然也可以继承AbstractInterceptor。
2.配置struts.xml。
<interceptors>
<interceptor name="loginInterceptor" class="com.info.interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="myDefaultInterceptorStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultInterceptorStack"></default-interceptor-ref>
<action name="loginAction" class="com.info.action.Login">
<result name="success">/login.jsp</result>
<interceptor-ref name="loginInterceptor">
<param name="excludeMethods">execute</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
要注意顺序,不然启动会报错。最后一定要加上<interceptor-ref name="defaultStack"></interceptor-ref>,不然拦截器功能会失效。
或者在action中也可以只写<interceptor-ref name="defaultStack"></interceptor-ref>,代表loginAction只采用默认拦截方式,不采用myDefaultInterceptorStack。
大功告成,是不是也不难。