1.拦截器的配置
此处以“检测用户是否登录”为例,
MyInterceptor.java
public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("---------intercept()---------");
Map<String, Object> session = invocation.getInvocationContext().getSession();
if (session.get("username") != null) {
return invocation.invoke();
} else {
return "checkError";
}
}
}
struts.xml文件中配置:
<package name="testLogin" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor" />
<!-- class="MyInterceptor"已在spring配置文件中配置bean -->
</interceptors>
<action name="user" class="UserManagerAction">
<result name="success">/user.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
<result name="checkError">/checkSession.jsp</result>
<interceptor-ref name="myInterceptor" />
<interceptor-ref name="defaultStack" />
</action>
</package>
注意:action中,设置好自己的interceptor后,别忘了配置defaultStack拦截器。
defaultStack是Struts2默认的拦截器,帮助我们完成许多struts2提供的服务。
2.拦截链的配置
当一个action需要多个拦截器时,我们可以配置拦截链
<package name="testLogin" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor" />
<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
<interceptor-stack name="defaultInterceptor">
<interceptor-ref name="myInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="otherDefaultInterceptor">
<interceptor-ref name="otherMyInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="user" class="UserManagerAction">
<result name="success">/user.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
<result name="checkError">/checkSession.jsp</result>
<interceptor-ref name="otherDefaultInterceptor" />
</action>
</package>
3.设置默认拦截器/拦截链(普遍配置)
当多个action都需要配置相同的拦截器/拦截链时,考虑设置默认的拦截器/拦截链,则不用在每个action中依次配置了。
<package name="testLogin" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor" />
<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
<interceptor-stack name="defaultInterceptor">
<interceptor-ref name="myInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="otherDefaultInterceptor">
<interceptor-ref name="otherMyInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultInterceptor" />
<action name="user" class="UserManagerAction">
<result name="success">/user.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
<result name="checkError">/checkSession.jsp</result>
</action>
</package>
4.屏蔽默认拦截器/拦截链(特殊配置)
当所在package中设置了默认拦截器/拦截链,某些个别action需要特殊拦截器/拦截链时,单独在action中配置所需拦截器/拦截器,即可屏蔽默认拦截器/拦截链,执行单独设置的拦截器/拦截链。
<package name="testLogin" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="MyInterceptor" />
<interceptor name="otherMyInterceptor" class="OtherMyInterceptor" />
<!-- 已在spring的applicationContext-bean.xml中配置相关bean -->
<interceptor-stack name="defaultInterceptor">
<interceptor-ref name="myInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="otherDefaultInterceptor">
<interceptor-ref name="otherMyInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultInterceptor" />
<action name="user" class="UserManagerAction">
<result name="success">/user.jsp</result>
<result name="error" type="redirect">/error.jsp</result>
<result name="checkError">/checkSession.jsp</result>
<interceptor-ref name="otherDefaultInterceptor" />
</action>
</package>