【问题标题】:Http Basic Authentication not working with Spring WS and WebServiceTemplate credentialsHttp Basic Authentication 不适用于 Spring WS 和 WebServiceTemplate 凭据
【发布时间】:2014-07-16 11:16:06
【问题描述】:

我尝试使用 Spring(-WS) 将 HTTP 基本身份验证凭据添加到我的 SOAP 请求中。请求本身有效,但没有提交凭据。 HTTP 标头应如下所示:

[...]
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Authorization: Basic mybase64encodedtopsecretcredentials=

但最后一行没有丢失。在 MyConfig.java 中,我配置了 Bean(无 XML):

@Bean
public WebServiceTemplate webServiceTemplate() {
    WebServiceTemplate template = new WebServiceTemplate();
    try {
        template.setMarshaller(marshaller());  //Jaxb2Marshaller
        template.setUnmarshaller(marshaller());

        // proxy for tcpmon inspection
        template.setDefaultUri("http://127.0.0.1:29080/target/webservice.php");
        String username = environment.getProperty("config.username");
        String password = environment.getProperty("config.password");
        Credentials credentials = new UsernamePasswordCredentials(username, password);
        HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
        sender.setCredentials(credentials);
        sender.afterPropertiesSet();
        template.setMessageSender(sender);
    } catch (Exception e) {
        // @todo: handle me
    }
    return template;
}

如果您知道缺少授权行的原因,请告诉我。 :) 提前非常感谢您

【问题讨论】:

    标签: java spring web-services soap spring-ws


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      this link 所述(谢谢@Milos),您需要创建一个类:

      public class WebServiceMessageSenderWithAuth extends HttpUrlConnectionMessageSender{
      
          @Override
          protected void prepareConnection(HttpURLConnection connection)
                  throws IOException {
      
              Base64.Encoder enc = Base64.getEncoder();
              String userpassword = "login:password"; // change to a real user and password
              String encodedAuthorization = enc.encodeToString(userpassword.getBytes());
              connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
      
              super.prepareConnection(connection);
          }
      }
      

      并传递给消息发送方方法:

      setMessageSender(new WebServiceMessageSenderWithAuth());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-24
        • 2016-02-12
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 2018-08-21
        • 1970-01-01
        • 2020-09-10
        相关资源
        最近更新 更多