2

我正在尝试使用 Spring WebServiceTemplate 发出 SOAP 服务请求,但是我总是出错。

当我使用 SOAP UI 时,相同的请求给出了成功的响应。我在 SOAP UI 中唯一不同的是,我选择了一个单选按钮“预先验证”

下面是我的 WebServiceTemplate 和客户端的代码片段。

@Bean(name = "xxxxxWSTemplate")
public WebServiceTemplate xxxxxWSTemplate() throws Exception {
    final WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
    webServiceTemplate.setDefaultUri(env.getProperty("integration.webservice.url"));
    final Jaxb2Marshaller marshaller = new org.springframework.oxm.jaxb.Jaxb2Marshaller();
    marshaller.setContextPath(ObjectFactory.class.getPackage().getName());
    webServiceTemplate.setMarshaller(marshaller);
    webServiceTemplate.setUnmarshaller(marshaller);

    String userName = env.getProperty("integration.service.xxx.username");
    String password = env.getProperty("integration.service.xxx.password");

    Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor();
    wss4jSecurityInterceptor.setSecurementUsername(userName);
    wss4jSecurityInterceptor.setSecurementPassword(password);
    wss4jSecurityInterceptor.setSecurementMustUnderstand(true);
    wss4jSecurityInterceptor.setSecurementActions("UsernameToken");
    wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText");
    wss4jSecurityInterceptor.afterPropertiesSet();

    webServiceTemplate.setInterceptors(new ClientInterceptor[] {wss4jSecurityInterceptor});

    return webServiceTemplate;
}

我总是从我的代码中得到“500-Internal Server Error”,但是同样的请求从 SOAP-UI 运行。

4

1 回答 1

0

实际上,“先发制人地进行身份验证”是 HTTP 客户端的一部分,它与 SOAP 完全无关。

我认为您的问题只是“基本授权”。

我建议看看HttpComponentsMessageSender

* {@code WebServiceMessageSender} implementation that uses <a href="http://hc.apache.org/httpcomponents-client">Apache
 * HttpClient</a> to execute POST requests.
 *
 * <p>Allows to use a pre-configured HttpClient instance, potentially with authentication, HTTP connection pooling, etc.
 * Authentication can also be set by injecting a {@link Credentials} instance (such as the {@link
 * UsernamePasswordCredentials}).

还要研究来自 Apache Commons HTTP 客户端的HTTP 身份验证,例如关于您的“先发制人”:

HttpClient 不支持开箱即用的抢占式身份验证,因为如果误用或不正确地使用抢占式身份验证,可能会导致严重的安全问题,例如将用户凭据以明文形式发送给未经授权的第三方。因此,用户应在其特定应用环境的上下文中评估抢先式身份验证的潜在好处与安全风险。

从Spring 集成的角度来看,无事可做,顺便说一句......

于 2016-04-08T13:48:47.113 回答