首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的preHandle拦截器在控制器方法之后调用

在Spring MVC中,拦截器是一种用于拦截请求并在处理请求之前或之后执行特定操作的机制。preHandle拦截器是在控制器方法执行之前调用的。

preHandle拦截器的调用顺序是在DispatcherServlet将请求分发给控制器方法之前。它可以用于执行一些预处理操作,例如身份验证、权限检查、日志记录等。通过preHandle拦截器,我们可以在请求到达控制器方法之前对请求进行一些处理,以确保请求的合法性或进行一些必要的准备工作。

preHandle拦截器的调用顺序是由拦截器的配置顺序决定的。在Spring MVC中,可以通过实现HandlerInterceptor接口来创建自定义的拦截器,并通过配置文件或注解将其应用到特定的请求路径或控制器上。

在拦截器链中,preHandle拦截器的返回值决定了是否继续执行后续的拦截器和控制器方法。如果preHandle返回true,则继续执行后续的拦截器和控制器方法;如果返回false,则中断请求的处理流程,不再执行后续的拦截器和控制器方法。

需要注意的是,preHandle拦截器在控制器方法之后调用的情况可能是由于拦截器链中的其他拦截器返回了false,导致请求的处理流程被中断。此外,还可能是由于异常的抛出或其他特殊情况导致的。

总结起来,preHandle拦截器在控制器方法之后调用的原因可能是:

  1. 拦截器链中的其他拦截器返回了false,中断了请求的处理流程。
  2. 异常的抛出或其他特殊情况导致了拦截器链的中断。

腾讯云相关产品推荐:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

拦截器

拦截器三个抽象方法 SpringMVC中拦截器有三个抽象方法preHandle控制器方法执行之前执行preHandle(),其boolean类型返回值表示是否拦截或放行,返回true为放行,...即调用控制器方法;返回false表示拦截,即不调用控制器方法 postHandle:控制器方法执行之后执行postHandle() afterCompletion:处理完视图和模型数据,渲染视图完毕之后执行...afterCompletion() # 多个拦截器执行顺序 若每个拦截器preHandle()都返回true 此时多个拦截器执行顺序和拦截器SpringMVC配置文件配置顺序有关: preHandle...return true; } //控制器方法执行之后 @Override public void postHandle(HttpServletRequest request...return true; } //控制器方法执行之后 @Override public void postHandle(HttpServletRequest request

76720

SpringMvc—拦截器「建议收藏」

大家好,又见面了,是你们朋友全栈君。 SpringMvc—拦截器 作用 拦截器是用来拦截经过dispatcherServlet【请求控制器请求。它用来拦截控制器方法执行。...SecondInterceptor--preHandle--控制器方法执行之前执行 SecondInterceptor--postHandle---控制器方法执行之后执行 FirstInterceptor...----视图渲染完毕执行 源码中 首先为控制器方法打上断点。...再跳到下一个断点就会回到控制器方法跳到下一个断点就是那个postHandel方法。...就会发现,进入applyPreHandel方法中后,先执行第一个注册interceptorpreHandel方法,执行后再执行第二个拦截器,但是第二个拦截器返回值被修改为false,就会通过applyPreHandel

50410

SpringMVC:拦截器

目录 拦截器配置 拦截器三个抽象方法 多个拦截器执行顺序 拦截器配置 SpringMVC中拦截器用于拦截控制器方法执行 SpringMVC中拦截器需要实现HandlerInterceptor...--> 拦截器三个抽象方法 SpringMVC中拦截器有三个抽象方法preHandle控制器方法执行之前执行preHandle(),其boolean类型返回值表示是否拦截或放行,返回true...为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法 postHandle:控制器方法执行之后执行postHandle() afterCompletion:处理完视图和模型数据,渲染视图完毕之后执行...afterCompletion() 多个拦截器执行顺序 ①若每个拦截器preHandle()都返回true 此时多个拦截器执行顺序和拦截器SpringMVC配置文件配置顺序有关: preHandle...和它之前拦截器preHandle()都会执行,postHandle()都不执行,返回false拦截器之前拦截器afterCompletion()会执行

22230

springmvc拦截器

拦截器配置 SpringMVC中拦截器用于拦截控制器方法执行 SpringMVC中拦截器需要实现HandlerInterceptor SpringMVC拦截器必须在SpringMVC配置文件中进行配置...SpringMVC中拦截器有三个抽象方法preHandle控制器方法执行之前执行preHandle(),其boolean类型返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回...false表示拦截,即不调用控制器方法 postHandle:控制器方法执行之后执行postHandle() afterCompletion:处理完视图和模型数据,渲染视图完毕之后执行afterCompletion...() 多个拦截器执行顺序  ①若每个拦截器preHandle()都返回true 此时多个拦截器执行顺序和拦截器SpringMVC配置文件配置顺序有关: preHandle()会按照配置顺序执行...,而postHandle()和afterCompletion()会按照配置反序执行 ②若某个拦截器preHandle()返回了false preHandle()返回false和它之前拦截器preHandle

19320

详述 Spring MVC 框架中拦截器 Interceptor 使用方法

preHandle方法,如果已经是最后一个Interceptor时候,就会是调用当前请求控制器方法。...postHandle方法在当前请求进行处理之后,也就是控制器方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对控制器处理之后ModelAndView...invoke方法来触发对下一个Interceptor或者是action调用,然后每一个Interceptor中invoke方法调用之前内容都是按照声明顺序执行,而invoke方法之后内容就是反向...接下来,我们主要讲一下WebRequestInterceptor接口 3 个函数: preHandle(WebRequest request)方法,该方法在请求处理之前进行调用,也就是说,其会在控制器方法调用之前被调用...postHandle(WebRequest request, ModelMap model)方法,该方法在请求处理之后,也就是控制器方法调用之后调用,但是会在视图返回被渲染之前被调用,所以可以在这个方法里面通过改变数据模型

1K30

Spring Web MVC 拦截器

拦截器按一定顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。访问被拦截方法或字段时,拦截器链中拦截器就会按其之前定义顺序被调用。...1.3 HandlerInterceptor 中方法 1.3.1 preHandle   方法将在请求处理之前进行调用,该方法返回值是布尔值 Boolean 类型,当它返回为 false 时,表示请求结束...1.3.2 postHandle   该方法是在当前请求进行处理之后调用,前提是 preHandle 方法返回值为 true 时才能被调用,且它会在 DispatcherServlet 进行视图返回渲染之前被调用...,所以我们可以在这个方法中对 Controller 处理之后 ModelAndView 对象进行操作 1.3.2 afterCompletion   该方法将在整个请求结束之后,也就是 DispatcherServlet...渲染了对应视图之后执行,前提是 preHandle 方法返回值为 true 时才能被调用 1.3.2 执行顺序   当拦截器 preHandle 方法返回 true 则会执行目标资源,如果返回

56510

springboot08、拦截器HandlerInterceptor

我们开发应用,对外暴露控制器中定义 API 方法,我们可以 API 方法外围放置拦截器,所有对 API 访问都可以通过拦截器进行过滤。...方法是进行处理器拦截用,顾名思义,该方法将在Controller处理之前进行调用。..."+nickName+",可以根据获取值判断是否是sql注入等操作"); } return true; } /** * 这个方法只会在当前这个InterceptorpreHandle...MyInterceptor 中方法执行顺序为 preHandle – Controller 方法 – postHandle – afterCompletion ,所以拦截器实际上可以对 Controller...preHandle 返回 true 时,对控制器方法请求才能到达控制器,继而到达 postHandle 和 afterCompletion 方法;如果 preHandle 返回 false ,后面的方法都不会执行

40330

【二十二】springboot整合拦截器实战并对比过滤器

本章和上章相比,通过使用拦截器方式去模拟处理token校验,再之后通过两者对比,比较一下两者不同。下面开始拦截器基础用法学习。...= token; } @Override //用于将响应发送到客户端之前执行操作,就是控制器执行完之后返回数据时执行。...preHandle将请求发送到控制器controller之前执行操作,若返回true就进入控制器,若返回false就不进入控制器了。...postHandle:用于将响应发送到客户端之前执行操作,就是控制器执行完之后返回数据时执行。 afterCompletion:完成请求和响应后执行操作。...:拦截器preHandle方法是根据order大小从小到大顺序执行,postHandle和afterCompletion方法是根据order大小从小到大倒叙执行。

600

面试官:兄弟,讲一下责任链模式

之前面试时候被问到责任链模式问题,当时答不上来。这件事就一直心里耿耿于怀。相信很多人面试完都有这种体验,哈哈~ 不过今日不同往日了,现在已经搞懂了,其实并不是很难,给大家分享一下。...下面用一张图来看看调用执行顺序。其实没有想得那么难吧。你学会了吗? ? 责任链模式优点 我们回过头去看,为什么这么绕呢,直接if不香吗?...SpringMVC拦截器使用 很简单,实现HandlerInterceptor接口,接口有三个方法需要重写。 preHandle():在业务处理器处理请求之前被调用。预处理。...是doDispatch()方法里,获取调用链getHandler()方法中组装好interceptorList拦截器集合!...SpringMVC拦截器执行流程图解 用张图总结一下,就是这样,用不同颜色分步骤从浅到深标记了(求点赞): ?

24510

SpringMVC拦截器配置

拦截器顾名思义就是用于拦截访问请求,我们可以拦截器里对访问请求进行事先处理,例如权限检查、记录日志、验证请求数据等等。说白了就是我们可以在请求到控制器之前对其进行一个处理。...关于这三个方法执行顺序: preHandle方法在请求到控制器之前被执行,也就是预处理方法,该方法返回值决定请求是否发送到控制器中,true是发送,类似于filter中doFilter,false...则是中断 postHandle方法控制器之后被执行,此时我们可以通过modelAndView参数对象对模型数据或对视图数据进行处理 afterCompletion方法整个请求处理完毕时执行,即在视图渲染完毕时回调...控制器--test方法被执行了 TestInterceptor--拦截器postHandle方法被执行了 TestInterceptor--拦截器afterCompletion方法被执行了 注:拦截器...通过浏览器访问后,控制台打印结果如下: TestInterceptor--拦截器preHandle方法被执行了 从控制台打印结果中可以看到,请求没有被发送到控制器上,而是拦截器这里中断了。

59340

【Spring底层原理高级进阶】轻松掌握 Spring MVC 拦截器机制:深入理解 HandlerInterceptor 接口和其实现类用法

深入了解其原理与机制 介绍 拦截器 Spring MVC 中扮演着重要角色,用于拦截请求和响应处理过程,并允许开发人员在请求进入控制器之前或离开控制器之后执行自定义逻辑。...HandlerInterceptor 接口包含了三个核心方法preHandle:在请求到达控制器之前被调用。可以用于进行一些前置处理,如身份验证、权限检查等。...postHandle:控制器方法执行完成后,视图渲染之前被调用。可以对模型数据进行进一步处理或修改。 afterCompletion:整个请求处理完成后被调用。...这些方法拦截器链中按照特定顺序被调用多个拦截器存在情况下,它们执行顺序由拦截器配置顺序决定。拦截器执行顺序是先进后出,即先配置拦截器最后执行。...拦截器实际项目中有多种应用场景,除了身份验证之外还有以下常见用途,以及做过在业务中具体实现: 日志记录:拦截器可以用于记录请求和响应日志信息,包括请求URL、参数、处理时间等。

39210

SpringMVC之拦截器

访问被拦截方法或字段时,拦截器链中拦截器就会按其之前定义顺序被调用。 说到这里,可能大家脑海中有了一个疑问,这不是我们之前学过滤器吗?...拦截器是 SpringMVC 框架自己,只有使用了 SpringMVC 框架工程才能用。 过滤器 url-pattern 中配置了/*之后,可以对所有要访问资源拦截。...拦截器它是只会拦截访问控制器方法,如果访问是 jsp,html,css,image 或者 js 是不会进行拦截。 它也是 AOP 思想具体应用。...3.1、拦截器放行 放行含义是指,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器最后一个,则执行控制器方法。...完全处理完请求后被调用, * 可以方法中进行一些资源清理操作。

40010

SpringMVC文件上传、拦截器、异常处理

拦截范围 url-pattern 中配置了/*之后,可以对所有要访问资源拦截 只会拦截访问控制器方法,如果访问是 jsp,html,css,image 或者 js 是不会进行拦截...自定义拦截器步骤: 创建拦截器类实现HandlerInterceptor接口 方法名 说明 preHandle() 方法将在请求处理之前进行调用,该方法返回值是布尔值Boolean类型,当它返回为...() 该方法是在当前请求进行处理之后调用,前提是preHandle 方法返回值为true 时才能被调用,且它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对...Controller 处理之后ModelAndView 对象进行操作 afterCompletion() 该方法将在整个请求结束之后,也就是DispatcherServlet 渲染了对应视图之后执行...,前提是preHandle 方法返回值为true 时才能被调用 配置拦截器 测试拦截器拦截效果 ?

57810

【Spring学习】过滤器和拦截器

1.2、为什么要使用过滤器 Web开发中,经常会有这样需求:在所有接口中去除用户输入非法字符,以防止引起业务异常。...preHandle() :这个方法将在请求处理之前进行调用。「注意」:如果该方法返回值为false ,将视为当前请求结束,不仅自身拦截器会失效,还会导致其他拦截器也不再执行。...postHandle():只有 preHandle() 方法返回值为true 时才会执行。会在Controller 中方法调用之后,DispatcherServlet 返回渲染视图之前被调用。...「有意思是」:postHandle() 方法调用顺序跟 preHandle() 是相反,先声明拦截器 preHandle() 方法先执行,而postHandle()方法反而会后执行。...afterCompletion():只有 preHandle() 方法返回值为true 时才会执行,整个请求结束之后, DispatcherServlet 渲染了对应视图之后执行。

52620

快速学习-SpringMVC 中拦截器

访问被拦截方法或字段时,拦截器链中拦截器就会按其之前定义顺序被调用。 说到这里,可能大家脑海中有了一个疑问,这不是我们之前学过滤器吗?...拦截器是 SpringMVC 框架自己,只有使用了 SpringMVC 框架工程才能用。 过滤器 url-pattern 中配置了/*之后,可以对所有要访问资源拦截。...拦截器它是只会拦截访问控制器方法,如果访问是 jsp,html,css,image 或者 js 是不会进行拦截。 它也是 AOP 思想具体应用。...4.3 拦截器细节 4.3.1 拦截器放行 放行含义是指,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器最后一个,则执行控制器方法。 ?...,这时拦截器 1 preHandle 方法返回 true,但是拦截器 2 preHandle 方法返回 false,而此时拦截器 1 afterCompletion 方法是否执行?

49240

SpringMVC拦截器

拦截器: 使用AOP思想,用于某个方法或字段被访问之前或之后,进行拦截。加入某些操作。比如日志,权限,安全等。 拦截器是springMVC框架中内容,只有springMVC框架中才能使用。...拦截器可以方法前后,异常前后等调用,过滤器只能在请求前和请求后各调用一次。 拦截器利用依赖注入,因此Spring框架程序中,优先过滤器。...3.1、拦截器放行 放行是指:如果有下一个拦截器就执行下一个,如果拦截器处于拦截器链(拦截器拦截器最后一个,则执行控制器方法。...3.2、拦截器方法 3.2.1、preHandle() public boolean preHandle(HttpServletRequest request, HttpServletResponse...DispatcherServlet 完全处理完请求后被调用,可以方法中进行一些资源清理操作。

59920

SpringMVC-拦截器

概述Java 里拦截器是动态拦截 action 调用对象,可以对 Controller 中方法执行之前与执行之后, 及页面显示完毕后, 执行指定方法,自定义拦截器必须实现 HandlerInterceptor...接口方法介绍preHandle在业务处理器处理请求之前被调用postHandle在业务处理器处理完请求后被调用afterCompletion DispatcherServlet 完全处理完请求后被调用使用...,至于为什么就要来看看源码了,源码分析如下, 多个拦截器都返回 true 源码执行流程如下,首先来看一下 preHandle、postHandle、afterCompletion 这三个方法分别调用时机吧...,它进入这个方法时候 interceptorIndex 是为 1 那么我们拦截器已经不会再从拦截器数组中获取了这也就是为什么只是输出了一个 preHandle 原因了图片这个方法执行完毕之后往回执行直接返回了一个...true 第二个拦截器返回 false 执行流程是怎样呢,自行修改 true false, 这里直接讲解源码流程图片如上图解释就是我们自定义拦截器第一个返回是 true 那么 preHandle

18930

Spring学习笔记(7)一Spring MVC拦截器

HandlerInterceptor接口,并实现了接口中三个方法preHandle() 方法:该方法会在控制器方法前执行,其返回值表示是否中断后续操作。...当其返回值为true时,表示继续向下执行; 当其返回值为false时,会中断后续所有操作(包括调用下一个拦截器控制器类中方法执行等)。...postHandle()方法:该方法会在控制器方法调用之后,且解析视图之前执行(DispatcherServlet渲染ModelAndView视图之前)。...单个拦截器程序中执行流程如下图所示: 1.程序先执行preHandle()方法,如果该方法返回值为true,则程序会继续向下执行处理器中方法,否则将不再向下执行。...拦截器配置在前),程序中执行流程如下图所示: 从图可以看出,当有多个拦截器同时工作时,它们preHandle()方法会按照配置文件中拦截器配置顺序执行,而它们postHandle()方法和afterCompletion

45530

Java 过滤器和拦截器

preHandle() 这个方法将在请求处理之前进行调用。注意:如果该方法返回值为false ,将视为当前请求结束,不仅自身拦截器会失效,还会导致其他拦截器也不再执行。...postHandle() 只有 preHandle() 方法返回值为true 时才会执行。会在Controller 中方法调用之后,DispatcherServlet 返回渲染视图之前被调用。...有意思是:postHandle() 方法调用顺序跟 preHandle() 是相反,先声明拦截器 preHandle() 方法先执行,而postHandle()方法反而会后执行。...afterCompletion() 只有 preHandle() 方法返回值为true 时才会执行。整个请求结束之后, DispatcherServlet 渲染了对应视图之后执行。...) throws Exception { return true; } /** * 目标方法执行后 * 该方法控制器处理请求方法调用之后、解析视图之前执行

79530

springmvc拦截器

拦截器是 SpringMVC 框架自己,只有使用了 SpringMVC 框架工程才能用。 过滤器 url-pattern 中配置了/*之后,可以对所有要访问资源拦截。...拦截器它是只会拦截访问控制器方法,如果访问是 jsp,html,css,image 或者 js 是不会进行拦 截。 它也是 AOP 思想具体应用。...> 拦截器一些细节 拦截器放行 放行含义是指,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器最后一个,则执行控制器方法。...返回true才是放行 拦截器方法 preHandle /** * 如何调用: * 按拦截器定义顺序调用 * 何时调用: * 只要配置了都会调用 * 有什么用: * 如果程序员决定该拦截器对请求进行拦截处理后还要调用其他拦截器...完全处理完请求后被调用, * 可以方法中进行一些资源清理操作。

24220
领券