一些背景知识:这是Weblogic Web服务创建的服务客户端通过Eclipse创建的。我相信这会在幕后使用clientgen。
我尝试进行需要抢先式基本身份验证的SOAP调用。请求正在发送,但Mimeheaders我设置的不是它。通话的接收者告诉我,请求本身正在通过,但我设置的任何mimeheaders都没有。
服务电话很简单。
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进行的这就是错误所要求的。
我不确定它是否与先发制人&#34;有关。需求?有没有办法将这种基本身份验证设置为先发制人?
思考? 任何帮助将不胜感激。
答案 0 :(得分:1)
Basic Auth在HTTP层而不是SOAP层完成,因此您需要配置底层HTTP库。 (MIME标头与它无关)
例如,对于CXF,请查看此问题HTTP basic authentication through CXF interceptor not working