1

拦截器的作用?

拦截器用于对浏览器到服务器的请求数据或者服务器到浏览器的返回数据做一些更改,或者对请求数据做一些增强

拦截器的原理和使用

工作原理:过滤器类似。

使用

  • 编写拦截器类,继承HandlerInterceptor接口。
  • 在servlet文件中注册拦截器。
  • 配置拦截器的拦截规则
    <mvc:interceptors>

    <mvc:interceptor>
        <mvc:mapping path="/hello3"/>
        <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
        <bean class="interceptor.Test1Interceptor"/>
    </mvc:interceptor>

    </mvc:interceptors>

拦截器的方法介绍

  • preHandler,请求被处理之前调用
    有返回值,返回值表示是否将请求拦截下来,若返回false,则将请求拦截下来,不会到达控制器以及后续方法
  • postHandler,请求被处理后进行调用
    可以通过ModelAndView参数来改变显示的视图,或修改发往视图的方法,如下所示:

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

System.out.println("postHandle");
modelAndView.addObject("name","被拦截器修改后的消息");

}

  • afterCompletion,在请求结束之后,即视图显示出来之后,才进行调用。类似于其他语言的析构函数。最重要的作用是进行一些资源的销毁、关闭一些流等。并不会经常用到。

多个拦截器工作流程图

clipboard.png

springMVC拦截器的使用场景

使用原则:处理所有请求的共同问题

1.解决乱码问题

2.解决权限验证问题

在preHandle方法中对用户是否登录进行判断,若未登录,则跳转至登录页面:

if(args.getSession.getAttribute("user")==null){
arg0.getRequestDispatcher("/login.jsp").forward(arg0,arg1);
return false;
}
return true;

springMVC拦截器的对比和总结

过滤器Filter依赖于servlet容器,基于回调函数,过滤范围大

拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求。

只是记录下知识点,参考自https://zhuanlan.zhihu.com/p/...


演绎梦幻舞步
105 声望2 粉丝

抽筋扒皮才能脱胎换骨,除此别无捷径