我需要在我的新web服务中合并一个身份验证头(即作为SOAP头请求的一部分)。该身份验证头将验证用户ID和密码详细信息。我必须验证请求头详细信息的内容,以便在我的Web服务中进行身份验证。如果通过了身份验证,那么请求的SOAP主体将被处理,否则无效的身份验证消息将由Web服务发送回调用该服务的客户端应用程序。
我无法理解如何创建一个web服务,其中SOAP头将包含一些元素(在我的例子中是身份验证元素,如userId和password)。
通常,服务中公开的任何方法都将作为SOAP主体的一部分。因此混淆了如何继续在SOAP头中添加身份验证元素。
请帮帮忙
问候,
我们只能从信封中获取报头,而不能从soap消息中获取报头。
最近,我编写了一个类,它将用户凭据添加到SOAP
头中。为此,您需要创建一个实现SoapHandler
接口的类。例如:
public class MyHandler implements SOAPHandler<SOAPMessageContext> {
private static final Logger LOGGER = LoggerFactory.getLogger(MyHandler.class);
private String username;
private String password;
/**
* Handles SOAP message. If SOAP header does not already exist, then method will created new SOAP header. The
* username and password is added to the header as the credentials to authenticate user. If no user credentials is
* specified every call to web service will fail.
*
* @param context SOAP message context to get SOAP message from
* @return true
*/
@Override
public boolean handleMessage(SOAPMessageContext context) {
try {
SOAPMessage message = context.getMessage();
SOAPHeader header = message.getSOAPHeader();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
if (header == null) {
header = envelope.addHeader();
}
QName qNameUserCredentials = new QName("https://your.target.namespace/", "UserCredentials");
SOAPHeaderElement userCredentials = header.addHeaderElement(qNameUserCredentials);
QName qNameUsername = new QName("https://your.target.namespace/", "Username");
SOAPHeaderElement username = header.addHeaderElement(qNameUsername );
username.addTextNode(this.username);
QName qNamePassword = new QName("https://your.target.namespace/", "Password");
SOAPHeaderElement password = header.addHeaderElement(qNamePassword);
password.addTextNode(this.password);
userCredentials.addChildElement(username);
userCredentials.addChildElement(password);
message.saveChanges();
//TODO: remove this writer when the testing is finished
StringWriter writer = new StringWriter();
message.writeTo(new StringOutputStream(writer));
LOGGER.debug("SOAP message: \n" + writer.toString());
} catch (SOAPException e) {
LOGGER.error("Error occurred while adding credentials to SOAP header.", e);
} catch (IOException e) {
LOGGER.error("Error occurred while writing message to output stream.", e);
}
return true;
}
//TODO: remove this class after testing is finished
private static class StringOutputStream extends OutputStream {
private StringWriter writer;
public StringOutputStream(StringWriter writer) {
this.writer = writer;
}
@Override
public void write(int b) throws IOException {
writer.write(b);
}
}
@Override
public boolean handleFault(SOAPMessageContext context) {
LOGGER.debug("handleFault has been invoked.");
return true;
}
@Override
public void close(MessageContext context) {
LOGGER.debug("close has been invoked.");
}
@Override
public Set<QName> getHeaders() {
LOGGER.debug("getHeaders has been invoked.");
return null;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
注意,我只是将凭据添加到头并返回true
。您可以对整个消息执行您想执行的任何操作,如果预期的操作失败,则返回false
。
我已经实现了这个客户端:
<bean id="soapHandler" class="your.package.MyHandler">
<property name="username" value="testUser"/>
<property name="password" value="testPassword"/>
</bean>
<jaxws:client "...">
<jaxws:handlers>
<ref bean="soapHandler"/>
</jaxws:handlers>
</jaxws:client>
但也可以在端点
上实现。
本文向大家介绍在SAPUI5的AJAX请求中添加身份验证详细信息,包括了在SAPUI5的AJAX请求中添加身份验证详细信息的使用技巧和注意事项,需要的朋友参考一下 基本上,您需要利用JQuery AJAX的beforeSend函数来整理您的需求。 这是一个基本的代码片段- 您可以按照AddToHeader方法中的说明向标头添加更多详细信息。
我使用Maven插件( 在target/generated source/wsdl2java/com中生成文件。公司。项目包括: Foo.java(java接口) foServiceLocator.java foSoapBindingImpl.java(java空实现) FoSoapBindingSkeleton.java FoSoapBindingStub.java 在我的项目中,我在一个同名的
问题内容: 我想知道是否有一种方法让Dagger知道在有新数据可用时它应该重新创建对象。 我正在说的实例是我具有改造的请求标头。在某个时候(当用户登录时),我得到一个令牌,我需要将其添加到改造的标头中以发出经过身份验证的请求。问题是,我留下了相同的未经认证的改造版本。这是我的注入代码: 关于如何进行这项工作的任何想法? 问题答案: 请考虑使用 @oldergod* 提到的方法,因为它是 “官方的”
一个客户端在我的SpringCloudGateway2上用它的证书点击了一条路由。我成功地使用x509身份验证对客户端进行了身份验证,然后,在将请求转发到下游服务之前,我想将主体名称添加到请求的cutom头中。 我已经创建了过滤器,但无法将主体名称放入标题值中。 下面是我的网关过滤器应用方法实现 问题是如何正确设置Headervalue,clientName.block()抛出异常...有什么建议
我已经安装了OpenLDAP服务器。 如何在LDAP服务器中添加用户(条目)?以及如何打开该服务器的命令窗口,以便在其上运行ldap命令: :我的要求是:在我的应用程序中,我想对Openldap服务器中添加的用户进行身份验证,但我只能在windows os上安装Openldap服务器,但如何添加用户我无法获得方法。在Windows7操作系统上安装openLDAP whic时添加用户的方法是什么?这
问题内容: 我正在尝试在python中使用基本身份验证 响应表单 auth 变量: 但是,当我尝试从其他位置获取数据时-我收到401错误 据我了解-在第二个请求中不是替换的会话参数。 问题答案: 您需要使用会话对象,并向 每个请求 发送身份验证。该会话还将为您跟踪Cookie:
问题内容: 我有angularjs应用程序,用户在其中输入保存到数据库的数据,然后在服务器端将其编译为pdf文件。所有访问都需要适当的身份验证标头。填充所需的数据后,用户可以按按钮保存数据,然后检索pdf文件。理想情况下,我在我的angularjs应用中调用)。这可以正常工作并在另一个窗口中打开,但是如何向此请求添加身份验证标头?以我的理解,我无法下载pdf并使用ajax进行打印,因此我缺少此身份
我试图得到一个API查询到python。命令行 给出一些json输出。myToken是一个十六进制变量,始终保持不变。我想从python中调用它,这样我就可以循环使用不同的ID并分析输出。有什么想法吗?在需要身份验证之前,我已经使用urllib2完成了这项工作。我还查看了requests模块,但不知道如何实现。 非常感谢。