首页
学习
活动
专区
工具
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

79720

SpringMvc—拦截器「建议收藏」

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

57710
  • SpringMVC:拦截器

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

    25330

    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

    20820

    腾讯面试:过滤器和拦截器区别是什么?答不上来,如鲠在喉?看看这篇吧

    请求首先通过preHandle方法,然后依次通过拦截器链中其他拦截器preHandle方法,最后到达控制器。...如果返回false,则请求将不会到达控制器。 postHandle方法在请求处理之后,视图渲染之前调用,可以用来修改响应模型。...调用时机: 过滤器:在请求进入后、离开前调用,可以在请求进入控制器之前进行预处理,也可以响应发送给客户端之前进行后处理。...调用顺序: 过滤器:通常按照在web.xml或Spring配置中定义顺序执行。 拦截器:可以更灵活地控制执行顺序,例如,可以preHandle方法中决定是否执行后续拦截器控制器。...拦截器:可以preHandle方法中开启事务,afterCompletion方法中关闭事务,从而实现事务控制。

    9710

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

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

    1.3K30

    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 则会执行目标资源,如果返回

    58310

    springboot08、拦截器HandlerInterceptor

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

    44730

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

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

    28810

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

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

    27510

    SpringMVC拦截器配置

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

    61840

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

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

    95410

    SpringMVC之拦截器

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

    41710

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

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

    59710

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

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

    73721

    SpringMVC拦截器

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

    65120

    快速学习-SpringMVC 中拦截器

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

    50740

    SpringMVC-拦截器

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

    20830

    Spring+SpringMVC+MyBatis 整合(+拦截器) 详:

    , 好处可以选择性重写~ HandlerInterceptor接口方法preHandle(): 这个方法在业务处理器处理请求之前被调用,SpringMVC 中Interceptor 是链式调用...Interceptor preHandle 方法; 如果已经是最后一个Interceptor 时候就会是调用当前请求Controller 方法。...有点类似于AOP 前置增强, 每次此请求前都会执行代码…如果返回false 则后面都不会执行; postHandle(): 这个方法在当前请求进行处理之后,也就是Controller 方法调用之后执行...该方法将在整个请求结束之后,也就是DispatcherServlet 渲染了对应视图之后执行。这个方法主要作用是用于进行资源清理工作。 有点类似于AOP 最终增强....-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器postHandle和afterCompletion方法 -->

    16510

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

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

    51030
    领券