使用 @Security 时引发的异常为 RuntimeException

Posted

技术标签:

【中文标题】使用 @Security 时引发的异常为 RuntimeException【英文标题】:Exceptions raised as RuntimeException when using @Security 【发布时间】:2015-10-20 10:40:11 【问题描述】:

在我的应用程序中,我有一个扩展异常的ApplicationException 类。对于许多错误情况,我使用预定义的消息提出此ApplicationException。我还有一个扩展HttpErrorHandler 的错误处理程序类。在那里,在onServerError() 方法中,我检查引发的异常是否是ApplciationException。如果是这样,我将错误消息作为 JSON 字符串返回。否则,我会返回一般错误消息。

一切都按预期工作,直到我将 @Security 注释添加到我的控制器方法中。从那时起,所有的例外都被提升到java.lang.RuntimeException

举个例子,抛出的内容如下:

- with @Security annotation: java.lang.RuntimeException: com.mypackage.ApplicationException: Invalid value supplied for entered parameter 'sort'
- without @Security annotation: com.mypackage.ApplicationException: Invalid value supplied for entered parameter 'sort'

我的 Authenticator 类(扩展 Security.Authenticator 的类)只覆盖了 getUsername()onUnauthorized() 方法。

有没有办法在仍然使用@Security 的同时保留ApplicationException

谢谢

【问题讨论】:

【参考方案1】:

这很不幸(也是不好的做法),但默认情况下 @Security 注释有一个捕获所有异常处理程序,如 here 所示。

注意:ThrowableExceptionRuntimeException 的父级

我认为您唯一的选择是用您自己的 (@MySecurity?) 重新实现 @Security 操作包装器,并专门重新实现 call 方法,而不使用全部捕获处理程序,并且可能放置您自己的.

希望能有所帮助。

【讨论】:

我明白了。我应该查看一下 Security 类的来源。可悲的是,您似乎是对的,唯一的方法是覆盖派生类中的 call() 方法。

以上是关于使用 @Security 时引发的异常为 RuntimeException的主要内容,如果未能解决你的问题,请参考以下文章

MongoSinkConnector:解析秘密引发验证异常

在 Spring Security 中添加新用户时出现异常

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

在身份验证 Spring Security + WebFlux 期间抛出和处理自定义异常

即使凭据为真,Spring Boot Security 也会在 API 调用上引发 401 身份验证错误

编写高质量代码改善C#程序的157个建议——建议60:重新引发异常时使用Inner Exception