Struts2中有默认的拦截器struts-default。当然我们也可以自定义自己的拦截器。例如我们想要定义一个权限拦截器。
(1):定义一个类,继承自AbstractInterceptor,实现里面的 intercept方法。
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String actionname = invocation.getAction().getClass().getSimpleName();
Map<String,Object> session = invocation.getInvocationContext().getSession();
Object loginstatus = String.valueOf(session.get("AGENTLOGINSTATUS"));
if(!"1".equals(loginstatus)){
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
String path=request.getContextPath();
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write("<script>alert('您尚未登录,或已超时!');window.location.href='"+path+"/JSP/front/public/invalidsession.jsp'</script>");
return null;
}
return invocation.invoke();
}
(2):然后在package包下面配置刚定义好的拦截器,如下
<interceptors>
<interceptor name="authcheck" class="en.estar.recharge.interceptor.PermissionInterceptor"/>
</interceptors>
(3):在需要拦截的action的result映射最后加上拦截配置
<action name="index"> <result>/JSP/front/index.jsp</result> <result name="changpass">/JSP/front/changepassword.jsp</result> <interceptor-ref name="defaultStack"/> <interceptor-ref name="authcheck"/> </action>
记住:必须在前面加上默认拦截器的配置。如果不加上,那么默认的拦截器就会失效。
以上3步就完成了一个简单的拦截器的配置。
附一:在第二步的配置中,我们也可以定义一个拦截器栈,
<interceptors> <interceptor name="permission" class="en.estar.recharge.interceptor.PermissionInterceptor"/> <interceptor-stack name="authcheck"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="permission"/> </interceptor-stack> </interceptors>
然后在action中引用这个拦截器栈也是可以的。。
附二:如果想要一个package下面的所有action都被拦截:可以自定义一个默认拦截器,然后覆盖原有的默认拦截器:
<interceptors> <interceptor name="checklogin" class="en.estar.recharge.interceptor.CheckLoginInterceptor"/> <interceptor-stack name="logincheck"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="checklogin"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="logincheck"/>
这段是现在package下的,配置里最重要的一段是最后一句,也就是覆盖了原有的默认拦截器。