Java:当身份验证被排除时我应该/抛出什么?

标签 java api exception authentication throw

我正在编写一个小型库,我需要在其中访问几种不同类型的文件。虽然每种文件格式的访问方法本身不同,但它们似乎有很多共同点,我在类层次结构中放置了一个接口(interface),在其中编写了一个应该连接到数据源的方法。

但是,由于数据源可能受到密码和/或用户权限的保护,有时需要身份验证才能检索数据。我的问题是:

  1. 在需要身份验证时抛出异常是个好主意吗?

    由于我想尽可能少地公开实现,所以我只想告诉用户发生了什么。但是身份验证可能需要很多不同的东西(用户名、密码等),所以我可以将它们打包到一个异常中并抛出吗?或者,也许有不求助于异常的更好方法,因为“需要身份验证”并不是异常通常用来处理的异常行为。

  2. 需要身份验证时抛出什么异常?

    现在假设我决定使用异常来处理这个问题。我应该抛出哪个异常? Java API 附带的几个 AuthenticationException 似乎不符合此要求,因为它们似乎都是特定于大小写的,例如,用于命名服务。我不确定 SecurityException 是否可行,但如果这不合适,我仍然真的不想抛出我自己的异常,因为那会妨碍其他人理解我的代码以及它是什么在 API 后面进行。

感谢任何输入!这有点冗长或过于冗长,因此非常欢迎任何可以改善问题的编辑。

最佳答案

AuthenticationException

我会去 throw AuthenticationException如果需要登录,则显示消息;如果通行证不好,则显示用户名或密码错误。

最好不要透露登录名是否存在。有时在 HTTP 中,使用未找到来隐藏未经授权的访问是很常见的。因此,如果凭据不允许连接,就像连接不存在一样。

关于Java:当身份验证被排除时我应该/抛出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600522/

相关文章:

C++ - 从 std::exception 继承的错误类的编译错误

c#:如何处理来自第 3 方库的终结器异常?

java - Hashmap null 转换为 int

java - ElasticSearch - 无法读取请求数据

java - 当我按下后退按钮时,我的 Activity 重新启动

api - 将多个第 3 方 GraphQL API 封装在单个 GraphQL 端点中

python - 将不在模型中的字段添加到 Django REST 框架中的序列化程序

android - 系统.DllNotFoundException : sqlcipher release build Xamarin

java - Android 客户端向 C 套接字服务器发送对象失败

java - JPA Repository.findById() 返回 null 但该值存在于数据库中