Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SpringWS拦截器中从SOAPUIAuth选项卡(HTTP头)获取用户名和密码?_Java_Spring_Web Services_Soap_Spring Ws - Fatal编程技术网

Java 如何在SpringWS拦截器中从SOAPUIAuth选项卡(HTTP头)获取用户名和密码?

Java 如何在SpringWS拦截器中从SOAPUIAuth选项卡(HTTP头)获取用户名和密码?,java,spring,web-services,soap,spring-ws,Java,Spring,Web Services,Soap,Spring Ws,我正在使用SpringWS,我需要对我的webservice调用执行简单的用户名和密码验证。为此,我需要获取用户名和密码的默认soap头属性。我不知道如何使用SpringWS实现这一点,我花了很多时间试图解决这个问题 我正在使用SoapUI,并通过在“Aut”选项卡中设置用户名和密码来发送用户名和密码 我的拦截器拦截我的调用,但我已经调试了messageContext,我不知道这些字段在哪里 这是我的代码,它不会在一段时间内进入代码,因此迭代器在下一段时间内返回false @Override

我正在使用SpringWS,我需要对我的webservice调用执行简单的用户名和密码验证。为此,我需要获取用户名和密码的默认soap头属性。我不知道如何使用SpringWS实现这一点,我花了很多时间试图解决这个问题

我正在使用SoapUI,并通过在“Aut”选项卡中设置用户名和密码来发送用户名和密码

我的拦截器拦截我的调用,但我已经调试了messageContext,我不知道这些字段在哪里

这是我的代码,它不会在一段时间内进入代码,因此迭代器在下一段时间内返回false

 @Override
 public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
   logger.info("Intercepting call");
   SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();
   SoapHeader soapHeader = soapMessage.getSoapHeader();

   Iterator<SoapHeaderElement> it = soapHeader.examineAllHeaderElements();
   while(it.hasNext()) {
    SoapHeaderElement element = it.next();
    QName qname = element.getName();
    logger.info("QName: " + qname.getLocalPart());
    logger.info("Value? " + soapHeader.getAttributeValue(qname));
  }

return true;
}
@覆盖
公共布尔HandlerRequest(MessageContext,对象端点)引发异常{
logger.info(“拦截呼叫”);
SoapMessage SoapMessage=(SoapMessage)messageContext.getRequest();
SoapHeader SoapHeader=soapMessage.getSoapHeader();
迭代器it=soapHeader.TesteallHeaderElements();
while(it.hasNext()){
SoapHeaderElement元素=it.next();
QName QName=element.getName();
logger.info(“QName:+QName.getLocalPart());
logger.info(“值?”+soapHeader.getAttributeValue(qname));
}
返回true;
}
如果你能告诉我关于这个主题的任何文档,或者更好的是,一些例子,这将是一个很大的帮助


非常感谢。

好的,我想我已经找到了答案,我的问题不是代码,而是SoapUI的eclipse插件,它没有真正发送授权头。我已经下载了桌面客户端,配置正确,现在我看到了标题

SOAPMessage soapMessage = context.getMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
soapEnvelope.getHeader();
启用该选项后,我编写了此代码,并能够获得用户和密码:

TransportContext transportContext =  TransportContextHolder.getTransportContext();
HttpServletRequest servletRequest = ((HttpServletConnection) transportContext.getConnection()).getHttpServletRequest();
String authorizationHeader = servletRequest.getHeader("authorization");
String userAndPasswordBase64 = authorizationHeader.substring("Basic ".length());
String userAndPassword = new String(Base64.decodeBase64(userAndPasswordBase64));

int colonIndex = userAndPassword.indexOf(':');
String user = userAndPassword.substring(0, colonIndex);
String password = userAndPassword.substring(colonIndex + 1);
这个问题确实帮助我解开了这个谜团:


谢谢,l

答案不是(唯一的)代码。你需要解释什么是错的以及答案是如何工作的……也许你应该更新你的问题,因为它指的是SOAP头,而不是HTTP头。@Andreas Vei如果你是对的,我只是修正了它。谢谢