带有HttpComponentsMessageSender和UsernamePasswordCredentials的Spring WebServiceTemplate不会第一次发送用户名和密码

时间:2018-10-15 11:35:27

标签: spring apache-commons-httpclient unauthorized

我使用spring WebServiceTemplateWebServiceGatewaySupport.getWebServiceTemplate())在https服务器上调用Soap Web服务。有一个用户名和密码验证。因此,我创建了一个HttpComponentsMessageSender的实例,并用UsernamePasswordCredentials进行了填充。没有其他额外设置,所有设置均为默认设置。

当我致电WebServiceTemplate.marshalSendAndReceive时,我会得到正确的结果,因此可以正常工作。

但是,当我看到应用程序日志时,我会在那里找到两个https调用(在单个marshalSendAndReceive调用内部)。第一个没有用户名和密码,结果为“ HTTP / 1.1 401未经授权”。框架从此错误中恢复,并使用用户名和密码发送第二个请求,结果为200 OK。

所以我的应用程序的运行情况几乎不错,它只是发送了一个额外的无用的无效https请求。

是否有一种方法可以强制Spring在第一个(也是唯一的)调用中包括用户名和密码? WebServiceTemplateHttpComponentsMessageSender或其他任何配置?

更新: 该行为是由apache-httpclient库中的“ while(!done)”循环中的DefaultRequestDirector.execute引起的。该库的代码似乎很复杂。

0 个答案:

没有答案