我正在编写一个小型库,我需要在其中访问几种不同类型的文件。虽然每种文件格式的访问方法本身不同,但它们似乎有很多共同点,我在类层次结构中放置了一个接口(interface),在其中编写了一个应该连接到数据源的方法。
但是,由于数据源可能受到密码和/或用户权限的保护,有时需要身份验证才能检索数据。我的问题是:
在需要身份验证时抛出异常是个好主意吗?
由于我想尽可能少地公开实现,所以我只想告诉用户发生了什么。但是身份验证可能需要很多不同的东西(用户名、密码等),所以我可以将它们打包到一个异常中并抛出吗?或者,也许有不求助于异常的更好方法,因为“需要身份验证”并不是异常通常用来处理的异常行为。
需要身份验证时抛出什么异常?
现在假设我决定使用异常来处理这个问题。我应该抛出哪个异常? Java API 附带的几个
AuthenticationException
似乎不符合此要求,因为它们似乎都是特定于大小写的,例如,用于命名服务。我不确定SecurityException
是否可行,但如果这不合适,我仍然真的不想抛出我自己的异常,因为那会妨碍其他人理解我的代码以及它是什么在 API 后面进行。
感谢任何输入!这有点冗长或过于冗长,因此非常欢迎任何可以改善问题的编辑。
最佳答案
AuthenticationException
我会去 throw AuthenticationException
如果需要登录,则显示消息;如果通行证不好,则显示用户名或密码错误。
最好不要透露登录名是否存在。有时在 HTTP 中,使用未找到来隐藏未经授权的访问是很常见的。因此,如果凭据不允许连接,就像连接不存在一样。
关于Java:当身份验证被排除时我应该/抛出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600522/