如果你使用了spring security框架,那肯定会从登录Login入手,前后端分离开发,通常少不了token验证,项目中肯定会使用到继承OncePerRequestFilter,
通常都会把这个过滤器,放在身份验证之前执行,这里在配置类里面设置过滤器的优先级,把验证过滤器放在身份验证前面
下面这个是我自己定义的全局异常捕获处理类,以及自定义异常的构造器
接下来就是问题了
在使用OncePerRequestFilter的时候,在这里面抛出的异常,无法被自己自定义的全局异常处理类捕获,会直接抛给security返回401(这里返回的数据是自己自定义的前后端协议)
可以看到这里的异常并没有被捕获,那是因为这是security框架,并没有经过controller,这里只写了捕获controller,并没有捕获到到那个过滤器
这是我在学习的过程中遇到麻烦的问题,接下来讲一下我的解决办法。
在这个过滤器里面,异常的部分,用try catch捕获,自己处理,不要让这个报异常就好了,因为这是个过滤器,异常没法向上抛,需要自己解决,这里需要先放行后再返回,不然无法返回数据信息给前端。
总结:spring security框架中,继承了OncePerRequestFilter的过滤器,不会被自定义的全局异常捕获,解决办法(1):在这个过滤器中,用try catch自己处理。