最近在练手的项目中使用拦截器做登录认证的时候发现了一个问题
连续两个的结果集,似乎就是我只发了一次请求,但是返回的是有两个,然后就debugger
这里是我们正常的一个请求进入,我这里是直接放行了的,然后我在后面的业务中出现了一个异常,本以为会抛异常然后返回一个错误的结果集但是返回的确实上面的那样
本来应该到此结束返回一个结果集(没做全局异常处理,只做了一个拦截器来进行拦截到error的时候会封装成结果集)
但是!!!他又回到了拦截器而且有请求的uri
最后就是为了找到这个原因开始了debug之路,最后发现是SpringBoot 默认提供了一个全局的 handler 来处理所有的 HTTP 错误, 并把它映射为 /error。当发生一个 HTTP 错误, 例如 404 错误时, SpringBoot 内部的机制会将页面重定向到 /error 中。
解决方法是:
@ControllerAdvice自定义全局异常处理器来将异常处理封装好,因为是是在控制器处理请求之后执行的,就不会把异常丢出去了,spring boot的默认拦截器也没用了;
这是我第二次遇到这个问题了,但是我第一次遇见的时候是有全局异常处理器的,不过是因为写了两个拦截器来想模拟鉴权和认证出现的问题,当时没用记录,现在记一下。散会!