Struts2拦截器

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下的,配置里最重要的一段是最后一句,也就是覆盖了原有的默认拦截器。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值