【问题标题】:SOAP Service Client doesn't send Mime headers for Basic AuthSOAP 服务客户端不发送基本身份验证的 Mime 标头
【发布时间】:2015-06-30 11:35:36
【问题描述】:

一些背景:这是一个Weblogic Web Services创建的服务客户端通过Eclipse创建的。我相信这会在幕后使用 clientgen。

我正在尝试进行需要抢先式基本身份验证的 SOAP 调用。请求正在发送,但我设置的 Mimeheaders 不适用。电话的接收者通知我请求本身正在通过,但我设置的任何 mimeheader 都没有。

服务调用相当简单。

DescriptionService service = new DescriptionService(wsdlLocation, new QName("urn:descriptionService.service.company.com", "DescriptionService"));
service.setHandlerResolver(new HandlerResolver() {
  @SuppressWarnings("rawtypes")
  @Override
  public List<Handler> getHandlerChain(final PortInfo portInfo) {
    final List<Handler> handlerList = new ArrayList<Handler>();
    handlerList.add(new SOAPDescriptionServiceHeaderHandler());
    return handlerList;
  }
});

DescriptionServicePortType portType = service.getDescriptionServicePort();

DescriptionRequest request = new DescriptionRequest();
request.setId(id);
DescriptionResponse description = portType.describe(request);

处理程序是我设置 Mimeheaders 的地方:

  @Override
  public boolean handleMessage(final SOAPMessageContext context) {
    final Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    final SOAPMessage message = context.getMessage();

    if (outboundProperty.booleanValue()) {
      try {
        MimeHeaders mimeheaders = message.getMimeHeaders();
        String encodedAuth = Base64.encode(new String("un:pw").getBytes());
        mimeheaders.addHeader("Authorization", "Basic " + encodedAuth); 
        this.logMessage(message, outboundProperty.booleanValue(), false);
      } catch (final Exception e) {
        // Log Error
      }
    } else {
      this.logMessage(message, outboundProperty.booleanValue(), false);
    }
    return true;
  }

它确实命中了这个处理程序并设置了 mimeheaders。如果我在离开 handleMessage 方法之前设置断点并查看 mime 标头,我可以看到它们已设置。

我可以调用请求并在 SoapUI 中获得响应。我设置了抢先式基本身份验证,它工作正常。当我通过 Java 客户端发送请求时,我没有收到任何响应,实际上收到一个错误,指出它的内容类型不正确。我相信这个错误是指错误响应,因为我实际上没有得到响应(也没有点击处理程序中的 handleMessage() 方法)并且我知道请求正在通过 text/xml 这就是错误要求。

我不确定它是否与“抢先”要求有关?有没有办法将这种方式设置的基本身份验证设置为抢占式?

想法? 任何帮助将不胜感激。

【问题讨论】:

    标签: java web-services soap basic-authentication


    【解决方案1】:

    Basic Auth 是在 HTTP 层完成的,而不是 SOAP 层,所以你需要配置底层的 HTTP 库。 (MIME 标头与它无关)

    例如CXF,看看这个问题HTTP basic authentication through CXF interceptor not working

    【讨论】:

      猜你喜欢
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多