关于HandlerInterceptor的坑

在使用自定义的HandlerInterceptor时要格外注意跨域的坑,因为一旦自定义的HandlerInterceptor执行preHandle抛出异常时,会导致interceptorChain中后面的其它HandlerInterceptor的preHandle方法得不到执行,其中会包括一个叫作CorsInterceptor的拦截器(如果你在WebMvcConfigurationSupport中配置了addCorsMappings的话),而CorsInterceptor的作用就是用来进行跨域处理的,CorsInterceptor的preHandle()得不到执行就没法在response中设置cors相关的headers,前端就会出现cors相关的错误。

可能你会想着去调整自定义的HandlerInterceptor与CorsInterceptor的顺序来达到先执行CorsInterceptor的目的,但这是行不通的,自定义的HandlerInterceptor是在项目启动的时候就添加到interceptors里了,而CorsInterceptor是在服务运行时新的请求来到时动态添加到interceptors里的,它的执行顺序永远在自定义的HandlerInterceptor后面。

解决方法可以是在自定义的HandlerInterceptor的preHandle()方法一开始就做类似于CorsInterceptor会做的事情(可以借鉴它的代码),或者去掉WebMvcConfigurationSupport中配置addCorsMappings的方法使用Filter去做跨域处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值