gpt4 book ai didi

spring-ws - "Pre-Emptive"Spring-WS 客户端的基本身份验证

转载 作者:行者123 更新时间:2023-12-04 15:44:11 26 4
gpt4 key购买 nike

我正在尝试使用 Spring-WS 构建一个简单的 Web 服务客户端,但遇到了麻烦。我试图调用的 SOAP 服务使用 HTTP 基本身份验证以确保安全。

使用 Spring-WS 教程示例,我已经配置了我的 WebServiceTemplate使用 HttpComponentsMessageSender提供我的凭据:

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory"/>
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="credentials">
<bean class="org.apache.http.auth.UsernamePasswordCredentials">
<constructor-arg value="john:secret"/>
</bean>
</property>
</bean>
</property>
<property name="defaultUri" value="http://example.com/WebService"/>
</bean>

当我尝试执行客户端时,出现以下错误:
org.springframework.ws.client.WebServiceTransportException: Authorization Required [401]
我之前的( WebServiceTemplate with Basic Auth using HttpComponentsMessageSenderHttpClientBuilder basic auth )搜索表明问题在于 Spring-WS 尝试首先连接到没有凭据的端点,这导致端点拒绝初始连接。

对于仍然使用 HTTP 基本身份验证的 Web 服务,这似乎是一个非常常见的问题。

我的问题是如何让 Spring 在初始连接尝试时显示凭据?

我想避免为看似微不足道的事情重新实现整个框架。

(作为引用,端点是一个我无法控制的内部 Web 服务,并且没有其他选项可以使用 HTTP 基本身份验证,无论人们认为它是如何失效或不安全)。

谢谢!

最佳答案

我假设您已经创建了一个扩展 WebServiceGatewaySupport 的客户端。在这种情况下,在您的 Configuration 类中定义客户端时,在那里设置 MessageSender。 MessageSender 必须配置凭据。

@Bean
public ValidateCustomerClient customerClient(Jaxb2Marshaller marshaller, WebServiceMessageSender messageSender){
ValidateCustomerClient client = new ValidateCustomerClient();
client.setDefaultUri(DEFAULT_URI);
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
client.setMessageSender(messageSender);//set MessageSender here instead on WebServiceTemplate
return client;
}

我发现在调用客户端时在 WebServiceTemplate 上使用凭据设置 MessageSender 不会保留凭据,从而导致 401。

虽然此解决方案适用于我们的案例,但我欢迎任何反馈。

关于spring-ws - "Pre-Emptive"Spring-WS 客户端的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com