具有可配置凭据的java Spring WebServiceClient
我想在Spring中创建一个具有可配置凭据的SOAP web服务客户端。 相同的实现将用于调用具有不同用户/通过身份验证的不同客户。 将使用基本身份验证
与spring ws WebServiceTemplate credentials类似,但每个调用的凭据不同
有没有比每次都获取WebServiceMessageSender并设置凭据更好的方法? 如果我这样做,那么与其他客户并行完成的请求会发生什么情况
当前配置
@Bean
public WebServiceTemplate webServiceTemplate(){
WebServiceTemplate template = new WebServiceTemplate();
template.setMessageSender(messageSender());
return template;
}
@Bean
public HttpComponentsMessageSender messageSender(){
HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
return sender;
}
Web服务客户端
public Status updateStatus(URL url, String user, String password,PackageStatus request){
WebServiceTemplate template = getWebServiceTemplate();
//TODO set credentials here ???
return (Status) template.marshalSendAndReceive(request);
}
非常感谢您的帮助, 近地天体
# 1 楼答案
最通用的解决方案是创建一个常规的Java工厂类,该类将在给定凭据的情况下创建web服务模板。下面是一个使用apache HttpComponents 4.3版的示例:
这是我看到的最基本的解决方案。 您可以通过不为同一用户名创建单独的客户端来优化它。您也可以为所有这些组件使用一个客户机——查看Apache HttpComponents文档(或您使用的其他底层客户机的文档)
请注意,Spring WS本身并没有实现客户机,它只是一些现有HTTP客户机上的包装器
更新:
如果您使用的是Apache HttpClient,请检查他们对AuthScope的使用情况。您可以为所有目的地(主机、端口)创建一个HttpClient,每个目的地都有自己的用户名/密码对。但你必须提前了解他们。如果是这种情况,那么可以使用上面的代码(修改为设置所有AuthScope/credentials对)来创建常规的Springbean。Apache HttpClient将根据目标自动选择正确的用户名/密码对