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

zw3*_*324 2 java authentication api exception throw

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

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

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

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

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

    现在假设我决定使用异常来处理这个问题。我应该抛出哪个异常?AuthenticationExceptionJava API 附带的几个s 似乎不符合此要求,因为它们似乎都非常特定于案例,例如,用于命名服务。我不确定这是不是SecurityException要走的路,但如果这是不正确的,我仍然真的不想抛出我自己的异常,因为这会妨碍其他人理解我的代码以及 API 背后发生的事情。

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

sse*_*ano 5

AuthenticationException

AuthenticationException如果需要登录并且用户名或密码错误,如果通行证不好,我会去抛出消息。

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

  • 我不会在通用“授权异常”事件中使用该类。该类属于非常专业的“javax.naming”包。javadoc 说:“当访问命名或目录服务时发生身份验证错误时,会引发此异常。”。 (2认同)