java - 在执行需要身份验证的http调用时如何解决循环依赖场景?

标签 java authentication design-patterns circular-dependency

我正在开发一个项目,该项目要求我使用 session token 执行标准 HTTP 调用。 我正在构建一个自定义 HTTP 客户端,带有自定义身份 validator ,如下所示:

Client client = Client.Builder().withConfig().withAuthenticator(Authenticator);

我的身份 validator 是一个接口(interface)

public interface Authenticator{
  SessionToken getSessionToken(); // so that different authentication methods can be supported
}

现在,为了执行请求,我需要获取一个 session token ,该 token 是通过调用 authenticator.getSessionToken() 获得的。然而, validator 必须调用后端来获取 token ,为此它需要客户端,从而导致循环依赖。我该如何解决这个问题?一种方法是创建一个单独的身份验证客户端,我将其传递到身份 validator 实现的构造函数中,但包导入仍然会显示循环依赖关系。有更好的方法来设计这个吗?

最佳答案

最终,Client并不真正需要 Authenticator ;它需要一个 SessionToken 。实现此目的的一种方法是替换 withAuthenticator()方法 withSessionToken() 。显而易见的实现是该方法直接接受 SessionToken ;但您也可能会认为Authenticatorfunctional interface因此可以表示为 Supplier<SessionToken> .

无论哪种方式,如果您替换 Client依赖AuthenticatorSessionTokenSupplier<SessionToken> ,你可以打破循环依赖。

关于java - 在执行需要身份验证的http调用时如何解决循环依赖场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54685464/

相关文章:

java - 注释处理期间的 GWT RfValidator NPE

c++ - 如何设计好的平台抽象层?

c# - 如何轻松实现聚合对象的接口(interface)? (语言无关)

Java 文件读取器 : How to assign every line in the text file to a variable

java - 获取按钮点击时间

java - 使用标准(Hibernate)仅获取最后的条目

python - 无法使用Python中的请求库登录

windows - 在命令行验证域凭据

c# - 使用 DotNetOpenAuth 实现 API key

java - 长时间运行的进程,在 UI 中显示进度