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>