Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在执行需要身份验证的http调用时解决循环依赖场景?_Java_Authentication_Design Patterns_Circular Dependency - Fatal编程技术网

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

Java 如何在执行需要身份验证的http调用时解决循环依赖场景?,java,authentication,design-patterns,circular-dependency,Java,Authentication,Design Patterns,Circular Dependency,我正在从事一个项目,该项目要求我使用会话令牌执行标准HTTP调用。 我正在构建一个自定义HTTP客户端,带有一个自定义验证器,如下所示: Client client = Client.Builder().withConfig().withAuthenticator(Authenticator); 我的验证器是一个接口 public interface Authenticator{ SessionToken getSessionToken(); // so that different au

我正在从事一个项目,该项目要求我使用会话令牌执行标准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实现的构造函数,但包导入仍将显示循环依赖关系。有更好的设计方法吗

最终,
客户端
并不真正需要
验证器
;它需要一个
SessionToken
。实现这一点的一种方法是将
with authenticator()
方法替换为
with sessiontoken()
。显而易见的实现是该方法直接接受一个
SessionToken
;但是您也可以考虑<代码>验证器< /代码>是A,因此可以表示为.


无论哪种方式,如果您用
SessionToken
Supplier
替换
Client
Authenticator
的依赖关系,您都可以打破循环依赖关系。

谢谢您的回答。我将为整个应用程序范围创建一次客户端实例,因此必须刷新会话令牌,这意味着在最坏的情况下为每个请求创建一个新的会话令牌。所以你的第一个方法是不可能的。不过我喜欢供应商的,肯定会试用,但是这个验证器不会是一个功能接口,这里还有其他一些方法:)