首页 » PHP教程 » phpillegalrequest技巧_阿里四面Spring Exception的事理你精晓了吗

phpillegalrequest技巧_阿里四面Spring Exception的事理你精晓了吗

访客 2024-11-18 0

扫一扫用手机浏览

文章目录 [+]

测试HTTP要求:

phpillegalrequest技巧_阿里四面Spring Exception的事理你精晓了吗

日志输出如下:解释IllegalRequestExceptionHandler未生效。

phpillegalrequest技巧_阿里四面Spring Exception的事理你精晓了吗
(图片来自网络侵删)

why? 这就须要精通Spring非常处理流程了。

解析

当所有Filter被实行完毕,Spring才会处理Servlet干系,而DispatcherServlet才是全体Servlet处理核心,它是前端掌握器设计模式,供应 Spring Web MVC 的集中访问点并卖力职责的分派。

在这,Spring处理了要乞降处理器的对应关系及统一非常处理。

Filter内非常无法被统一处理,便是由于非常处理发生在 DispatcherServlet#doDispatch()

但此时,过滤器已全部实行完。

Spring非常统一处理ControllerAdvice如何被Spring加载并对外暴露?WebMvcConfigurationSupport#handlerExceptionResolver()

实例化并注册一个ExceptionHandlerExceptionResolver 的实例

终极按下图调用栈,Spring 实例化了ExceptionHandlerExceptionResolver类。

ExceptionHandlerExceptionResolver实现了InitializingBean

重写 afterPropertiesSet()

initExceptionHandlerAdviceCache

完成所有 ControllerAdvice 中的ExceptionHandler 初始化:查找所有 @ControllerAdvice 表明的 Bean,把它们放入exceptionHandlerAdviceCache。
这里即指自定义的IllegalRequestExceptionHandler

所有被 @ControllerAdvice 表明的非常处理器,都会在 ExceptionHandlerExceptionResolver 实例化时自动扫描并装载在其exceptionHandlerAdviceCache。

initHandlerExceptionResolvers

当第一次要求发生时,DispatcherServlet#initHandlerExceptionResolvers() 将获取所有注册到 Spring 的 HandlerExceptionResolver 实例(ExceptionHandlerExceptionResolver正是),存到handlerExceptionResolvers

ControllerAdvice如何被Spring消费并处理非常?DispatcherServletdoDispatch()

实行用户要求时,当查找、实行要求对应的 handler 过程中非常时:

会把非常值赋给 dispatchException再移交 processDispatchResult()processDispatchResult

当Exception非空时,连续移交

processHandlerException

从 handlerExceptionResolvers 获取有效的非常解析器以解析非常。

这里的 handlerExceptionResolvers 一定包含声明的IllegalRequestExceptionHandler#IllegalRequestException 的非常处理器的 ExceptionHandlerExceptionResolver 包装类。

改动

为利用到 Spring MVC 的非常处理机制,改造Filter:

手动捕获非常将非常通过 HandlerExceptionResolver 进行解析处理

据此,修正 PermissionFilter,注入 HandlerExceptionResolver:

然后,在 doFilter 捕获非常并移交 HandlerExceptionResolver:

现在再用缺点 Token 要求,日志输出如下:

相应体:

相关文章

介绍白点控制之路,从原理到方法

白点,作为生活中常见的现象,无处不在。对于如何控制白点,许多人却感到困惑。本文将从原理出发,探讨白点的控制方法,并结合实际案例,为...

PHP教程 2025-01-03 阅读1 评论0

介绍直播王者,如何开启你的电竞直播之旅

随着电竞产业的蓬勃发展,越来越多的年轻人投身于电竞直播行业。王者荣耀作为一款备受欢迎的MOBA手游,吸引了大量玩家和观众。如何开启...

PHP教程 2025-01-03 阅读1 评论0