springboot集成springsecurity遇见的exception捕获问题

因为有些自定义的逻辑,我重写了DaoAuthenticationProvider(因为有其他的验证身份逻辑,所以我取消框架默认对密码的验证,并注入自己的userServiceDetail)和userDetailService(进行验证身份,其中包括账号密码验证、第三方登录验证等),在运行的过程中遇到了一些异常捕获问题。

在UserDetailSeviceImpl中,我打算在认证失败时抛出异常,再定义一个ExceptionFilter放在JwtAuthenticationFilter 和 UsernamePasswordAuthenticationFilter 之前。由他进行异常的捕获。

发现UsernamePasswordAuthenticationFilter的异常每次都捕获不到,而且还是InternalAuthenticationServiceException类型的异常。

抛出的InternalAuthenticationServiceException异常在这里被捕获到

最后会被failureHandler处理

 

也就是

最后还是觉得框架设计的挺好。

那有些自定义的过滤器(jwtAuthenticationFilter)还需要自己捕获异常吗?

后来想了一下,无需再解析jwt时抛出异常,如果解析不成功(那就没有认证信息存在Auththentication)就继续往下走过滤器链。因为过滤器链中最后一个过滤器AuthorizationFilter会判断是否有认证信息和是否有权限,如没有则也会抛出异常,他之前的过滤器ExceptionTransitionFilter中也会进行异常的捕获。如果无认证信息,也会执行authenticationEntryPoint配置的处理器,进行异常的处理。

初学security可能有些错误,欢迎指正。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值