如何做论坛网站 知乎,软件营销之群排名优化教程,2019做网站,网站后台程序开发教程⭐⭐⭐⭐⭐⭐ Github主页#x1f449;https://github.com/A-BigTree 笔记链接#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐
如果可以#xff0c;麻烦各位看官顺手点个star~#x1f60a;
如果文章对你有所帮助#xff0c;可以点赞#x1f44d;…⭐⭐⭐⭐⭐⭐ Github主页https://github.com/A-BigTree 笔记链接https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐
如果可以麻烦各位看官顺手点个star~
如果文章对你有所帮助可以点赞收藏⭐支持一下博主~ 文章目录6 SpringMVC拦截器6.1 概念拦截器VS过滤器相似点不同点选择6.2 使用6.2.1 创建拦截器类实现接口6.2.2 注册拦截器默认拦截全部请求配置拦截路径配置不拦截路径6.2.3 执行顺序6 SpringMVC拦截器
6.1 概念 拦截器VS过滤器
相似点
三要素相同
拦截必须先把请求拦住才能执行后续操作过滤拦截器或过滤器存在的意义就是对请求进行统一处理放行对请求执行了必要操作后放请求过去让它访问原本想要访问的资源
不同点
工作平台不同 过滤器工作在 Servlet 容器中拦截器工作在 SpringMVC 的基础上 拦截的范围 过滤器能够拦截到的最大范围是整个 Web 应用拦截器能够拦截到的最大范围是整个 SpringMVC 负责的请求 IOC 容器支持 过滤器想得到 IOC 容器需要调用专门的工具方法是间接的拦截器它自己就在 IOC 容器中所以可以直接从 IOC 容器中装配组件也就是可以直接得到 IOC 容器的支持
选择
功能需要如果用 SpringMVC 的拦截器能够实现就不使用过滤器。
6.2 使用
6.2.1 创建拦截器类
实现接口
public class Process01Interceptor implements HandlerInterceptor {Logger logger LoggerFactory.getLogger(this.getClass());// 在处理请求的目标 handler 方法前执行Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {logger.debug(Process01Interceptor preHandle方法);// 返回true放行// 返回false不放行return true;}// 在目标 handler 方法之后渲染视图之前Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {logger.debug(Process01Interceptor postHandle方法);}// 渲染视图之后执行Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {logger.debug(Process01Interceptor afterCompletion方法);}
}单个拦截器执行顺序:
preHandle()方法目标handler方法postHandle()方法渲染视图afterCompletion()方法
在较低版本的 SpringMVC 中实现HandlerInterceptor接口需要把所有抽象方法都实现。但是又不是每个方法都需要使用导致代码比较繁琐。
此时可以通过继承HandlerInterceptorAdapter类同样可以创建拦截器类。HandlerInterceptorAdapter类中已经给 HandlerInterceptor接口提供了默认实现我们继承后不需要把每个方法都实现只需要把有用的方法重写即可。
在 SpringMVC 较高版本例如5.3版本以上中HandlerInterceptor 接口已经借助JDK1.8新特性让每个抽象方法都给出了默认实现所以HandlerInterceptorAdapter这个类被标记为过时。
6.2.2 注册拦截器
默认拦截全部请求
!-- 注册拦截器 --
mvc:interceptors!-- 直接通过内部 bean 配置的拦截器默认拦截全部请求SpringMVC 范围内 --bean classcom.atguigu.mvc.interceptor.Process01Interceptor/
/mvc:interceptors配置拦截路径
精确匹配
!-- 具体配置拦截器可以指定拦截的请求地址 --
mvc:interceptor!-- 精确匹配 --mvc:mapping path/common/request/one/bean classcom.atguigu.mvc.interceptor.Process03Interceptor/
/mvc:interceptor匹配单层路径
mvc:interceptor!-- /*匹配路径中的一层 --mvc:mapping path/common/request/*/bean classcom.atguigu.mvc.interceptor.Process04Interceptor/
/mvc:interceptor匹配多层路径
mvc:interceptor!-- /**匹配路径中的多层 --mvc:mapping path/common/request/**/bean classcom.atguigu.mvc.interceptor.Process05Interceptor/
/mvc:interceptor配置不拦截路径
mvc:interceptor!-- /**匹配路径中的多层 --mvc:mapping path/common/request/**/!-- 使用 mvc:exclude-mapping 标签配置不拦截的地址 --mvc:exclude-mapping path/common/request/two/bbb/bean classcom.atguigu.mvc.interceptor.Process05Interceptor/
/mvc:interceptor6.2.3 执行顺序
preHandle()方法SpringMVC 会把所有拦截器收集到一起然后按照配置顺序调用各个preHandle() 方法目标 handler 方法postHandle()方法SpringMVC会把所有拦截器收集到一起然后按照配置相反的顺序调用各个postHandle()方法渲染视图afterCompletion()方法SpringMVC 会把所有拦截器收集到一起然后按照配置相反的顺序调用各个 afterCompletion() 方法