security框架异常,不被自己自定义的全局异常捕获处理。

如果你使用了spring security框架,那肯定会从登录Login入手,前后端分离开发,通常少不了token验证,项目中肯定会使用到继承OncePerRequestFilter,

通常都会把这个过滤器,放在身份验证之前执行,这里在配置类里面设置过滤器的优先级,把验证过滤器放在身份验证前面

下面这个是我自己定义的全局异常捕获处理类,以及自定义异常的构造器

接下来就是问题了

在使用OncePerRequestFilter的时候,在这里面抛出的异常,无法被自己自定义的全局异常处理类捕获,会直接抛给security返回401(这里返回的数据是自己自定义的前后端协议)

可以看到这里的异常并没有被捕获,那是因为这是security框架,并没有经过controller,这里只写了捕获controller,并没有捕获到到那个过滤器

这是我在学习的过程中遇到麻烦的问题,接下来讲一下我的解决办法。

在这个过滤器里面,异常的部分,用try catch捕获,自己处理,不要让这个报异常就好了,因为这是个过滤器,异常没法向上抛,需要自己解决,这里需要先放行后再返回,不然无法返回数据信息给前端。

总结:spring security框架中,继承了OncePerRequestFilter的过滤器,不会被自定义的全局异常捕获,解决办法(1):在这个过滤器中,用try catch自己处理。

Java中,我们可以通过自定义异常类来处理各种异常情况。下面是一个简单的示例,演示了如何创建和使用自定义异常类来处理Security异常。 首先,我们需要创建一个继承自Exception的异常类。在这个类中,我们可以定义一些异常信息,供需要使用这个类的代码使用。 ```java public class SecurityException extends Exception { public SecurityException(String message) { super(message); } } ``` 接下来,我们可以在需要处理Security异常的地方使用这个自定义异常类。例如,在一个需要验证用户权限的方法中,如果用户权限不足,我们可以使用上面定义的SecurityException类来抛出异常。 ```java public void checkPermission(User user) throws SecurityException { if (!user.hasPermission("admin")) { throw new SecurityException("Permission denied"); } } ``` 在这个示例中,如果用户没有管理员权限,就会抛出一个SecurityException异常,并且异常信息为"Permission denied"。 最后,在调用checkPermission方法的地方,我们需要使用try-catch语句来捕获SecurityException异常。 ```java try { checkPermission(user); } catch (SecurityException e) { // 处理异常 System.out.println(e.getMessage()); } ``` 在这个示例中,如果checkPermission方法抛出SecurityException异常,就会被catch语句捕获,并输出异常信息。 通过自定义异常类,我们可以更好地处理Security异常,并且可以提供更加详细和有意义的异常信息,方便我们进行调试和错误处理
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值