【发布时间】:2017-10-18 13:18:35
【问题描述】:
我有一个 Spring WS 客户端,它需要使用密钥库/信任库组合以及基本身份验证进行身份验证。
这是我目前拥有的相关 Spring 配置:
@Configuration
public class SpringWSConfig {
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("io.shido.credit.domain");
return marshaller;
}
@Bean
public WebServiceTemplate webServiceTemplate() throws Exception {
final WebServiceTemplate template = new WebServiceTemplate(jaxb2Marshaller(), jaxb2Marshaller());
template.setDefaultUri("https://domain.tld/SVC/data");
//template.setMessageSenders(new WebServiceMessageSender[]{ messageSender(), messageSender2() });
//template.setInterceptors(new ClientInterceptor[] { wss4jSecurityInterceptor() });
template.setMessageSender(messageSender());
return template;
}
@Bean
public HttpsUrlConnectionMessageSender messageSender() throws Exception {
HttpsUrlConnectionMessageSender messageSender = new HttpsUrlConnectionMessageSender();
messageSender.setTrustManagers(trustManagersFactoryBean().getObject()); // set the trust store(s)
messageSender.setKeyManagers(keyManagersFactoryBean().getObject()); // set the key store(s)
return messageSender;
}
这适用于密钥库/信任库部分。我能够成功地进行 SSL 握手,但现在我得到了一个 HTTP 401 (Unauthorized)。所以我尝试了:
- 拥有多个
senders;其中一个HttpComponentsMessageSender上面有用户名和密码......但它不起作用 - 用一些
Wss4jSecurityInterceptorconfig/settings 配置ClientInterceptor...也不起作用 - 要使用从
HttpsUrlConnectionMessageSender继承的发件人,请添加username和password字段,覆盖prepareConnection并设置connection.setRequestProperty以使用Authorization标头。这次我得到一个 HTTP 405 (Method Not Allowed)
任何线索如何做到这一点?
【问题讨论】:
标签: web-services authentication spring-ws