我正在开发一个项目,该项目要求我使用 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
;但您也可能会认为Authenticator
是 functional interface因此可以表示为 Supplier<SessionToken>
.
无论哪种方式,如果您替换 Client
依赖Authenticator
与 SessionToken
或Supplier<SessionToken>
,你可以打破循环依赖。
关于java - 在执行需要身份验证的http调用时如何解决循环依赖场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54685464/