拦截器的编写总结

总结如何编写一个全局拦截登录信息的拦截器:

Demo中包括2xml.一个struts.xml.一个user.xml;

struts.xml中使用include标签引入user.xml;便于模块化开发

struts.xml中创建package:

<package name="mydefault" namespace="/" extends="stack-default">

<interceptors>    //配置我们自己的拦截器栈

<interceptor name="myinter" class="自定义拦截器的全类名"></interceptor>

<interceptor-stack name=”mystack”>

<interceptor-ref name=”myinter”></..>

<interceptor-red name=”defaultStack”> </..>   //包裹入默认拦截栈

</interceptor-stack..>

<default-interceptor-ref name=”mystack”></default-interceptor-ref>

</interceptors>

</package>

在我们写的user.xml中只要package继承自mydefault即可;对于不需要过滤的比如登录action,

我们可以这样:

<action name=”load” class=”...” method=”load”>

<interceotor-ref name=”mystack”>

<param name=”myinter.excludeMethods”>load</param>//尖括号里写的是不需拦截的方法,与action标签中的method对应

</...>

</..>

-----------------创建一个自定义的拦截器类------

首先继承自MethodFilterInterceptor,重写doIntecept()方法,把我们要

过滤的信息方法写在其中:比如Demo中拦截用户直接通过url访问action的方法:

@Override

protected String doIntercept(ActionInvocation invocation) throws Exception {

User u = (User) ServletActionContext.getRequest().getSession().getAttribute("user");

if (u == null) {

return "login"; //起到了拦截的效果,拦截进入指定页面

}

return invocation.invoke();//放行进入下一个拦截器,如果有的话

} //如果没有下一个拦截器则允许访问action

其中值得注意的是拦截器3放行后没有其他拦截器,执行action,返回result后,加载并解析jsp,不过这个时候JSP仍然是没有显示在用户端的,等到解析完回到拦截器3,再回到2最后回到拦截器1,最后完成页面跳转。过程中:多个拦截器之间的数据通过ActionInvocation进行共享,假设一路放行,最后返回的String字符串是最后一个拦截器return的字符串也就决定了跳转到那个result结果集去。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值