1.自定义拦截器
@SuppressWarnings("serial") public class SessionInterceptor extends AbstractInterceptor { private static final Object LOGIN_KEY = "admin"; public static final String LOGIN_PAGE = "loginPage"; @Override public String intercept(ActionInvocation actionInvocation) throws Exception { Map session = actionInvocation.getInvocationContext().getSession(); Admin admin = (Admin) session.get(LOGIN_KEY); if (admin != null) { return actionInvocation.invoke(); } else { return LOGIN_PAGE; } } }
2.配置拦截器
有三种配置方法:
方法1. 普通配置法
<struts> <package name="struts2" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="SessionInterceptor"></interceptor> </interceptors> <action name="register" class="edu.hust.action.RegisterAction"> <result name="input">/register.jsp</result> <result>/result.jsp</result> <!-- 在自定义interceptor并将其ref时, 系统会覆盖掉默认的interceptor-stack(defaultStack), 为了保证系统默认的defaultStack不受印象, 我们需要显式的将其引入 --> <!-- 注意两个interceptor-ref的顺序, 顺序不同, 执行效果也不同: 先配置的先执行/后配置的先退出(先进后出) --> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="myInterceptor"></interceptor-ref> </action> </package> </struts>
方法2. 配置拦截器栈
<struts> <package name="struts2" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="SessionInterceptor"></interceptor> <interceptor-stack name="myInterceptorStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <action name="register" class="edu.hust.action.RegisterAction"> <result name="input">/register.jsp</result> <result>/result.jsp</result> <interceptor-ref name="myInterceptorStack"></interceptor-ref> </action> </package> </struts>
方法3. 修改默认拦截器,将自定义的拦截器栈定义为struts2的默认拦截器
<struts> <package name="struts2" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="SessionInterceptor"></interceptor> <interceptor-stack name="myInterceptorStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 此默认interceptor是针对所有action的 --> <!-- 如果某个action中引入了interceptor, 则在这个action中此默认interceptor就会失效 --> <default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> <action name="register" class="edu.hust.action.RegisterAction"> <result name="input">/register.jsp</result> <result>/result.jsp</result> </action> </package> </struts>