SpringMVC拦截器

拦截器的做用?

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

拦截器的原理和使用

工做原理:过滤器相似。

使用

  • 编写拦截器类,继承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 {mvc

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

}app

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

多个拦截器工做流程图

clipboard.png

springMVC拦截器的使用场景

使用原则:处理全部请求的共同问题框架

1.解决乱码问题jsp

2.解决权限验证问题函数

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

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

springMVC拦截器的对比和总结

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

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

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

相关文章
相关标签/搜索