我正在做一个项目,要求我执行带有会话令牌的标准HTTP调用。
我正在构建带有自定义身份验证器的自定义HTTP客户端,如下所示:

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


而我的身份验证器是一个接口

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


现在,为了执行请求,我需要获取一个会话令牌,该令牌是通过调用authenticator.getSessionToken()获得的。但是,身份验证器必须调用后端以获取令牌,而令牌为此需要客户端,从而导致循环依赖。我该如何解决?一种方法是创建一个单独的身份验证客户端,我将其传递给Authenticator Implementation的构造函数,但程序包导入仍会显示循环依赖性。有没有更好的方法来设计这个?

最佳答案

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

无论哪种方式,如果用ClientAuthenticator替换SessionToken上的Supplier<SessionToken>依赖关系,都可以打破循环依赖关系。

08-26 03:50