我开发了一个使用SpringXSD有效载荷的网络服务。我需要用SOAPUI实现的SOAP请求头中的用户名和密码来验证请求头
我能够在请求中生成下面的标题
<soapenv:Envelope xmlns:jaxb="http://jaxb.miws.sg.com/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis- 200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-C3092BFBAE5B212E93144378035575013">
<wsse:Username>User</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">test</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">CT1Fyo/g2WMaadE52bsnkg== </wsse:Nonce>
<wsu:Created>2015-10-02T10:05:55.750Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
现在我想验证用户名和密码的标题元素。
Ex:
案例1: userName=User and Password=test//身份验证通过并给出响应成功
案例2:userName=User1和Password=test1//身份验证失败,并给出响应失败
请帮助我提供合适的样品来达到同样的目的。
以下是实现此目的的一些步骤:
handleMessage
方法来实现一个SOAPHandler
类。 handleMessage
方法中,计算上下文的MESSAGE_OUTBOUND_PROPERTY
。如果它是false(意味着它是一个入站消息),那么编写代码来反省context.getMessage()
。在那里,您可以评估MIME标头,安全标头SOAPHandler的示例:
public class MyCustomSoapHandler implements SOAPHandler<SOAPMessageContext>
{
public Set<QName> getHeaders()
{
return Collections.emptySet();
}
public boolean handleMessage(SOAPMessageContext messageContext)
{
Boolean outboundProperty = (Boolean)
messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
//This is for handling messages going out of the conduit
} else {
//Here is where you want to authenticate
}
return true; //return false if do not want to proceed to the next handler in the chain
}
public boolean handleFault(SOAPMessageContext messageContext)
{
return true;
}
public void close(MessageContext messageContext)
{
}
这里有一个SOAPHandler的入门模板,您需要将它添加到服务的处理链中:
@WebService(name = "Handler", targetNamespace = "http://example.org")
@HandlerChain(file="handler-chain.xml")
public class HandlerWS
{
@Resource
WebServiceContext ctx;
@WebMethod()
public String getProperty(String propertyName)
{
return (String) ctx.getMessageContext().get(propertyName);
}
}
您还需要将handler-chain.xml
添加到类路径:
examples.webservices.handler.处理examples.webservices.handler.处理
有关完整的指南,请参阅Oracle的创建SOAPHandler
SOAP网络服务中的处理程序(类似于拦截器/过滤器)可以用于服务器端的身份验证目的,然后进一步链接请求。请查看SOAPHandler,以解析有效负载中的头信息并验证用户名/密码。服务器端的SOAP处理程序
问题内容: 我正在尝试创建一个独立的客户端来使用某些Web服务。我必须将我的用户名和密码添加到SOAP Header。我尝试添加凭据,如下所示: 当我在服务上调用方法时,出现以下异常: 我究竟做错了什么?如何将这些属性添加到SOAP Header? 编辑:我正在使用JDK6中包含的JAX-WS 2.1。我现在正在使用JAX-WS 2.2。我现在得到以下异常: 如何创建此令牌? 问题答案: 不是10
问题内容: 我有一个非常简单的方法,可以通过JAX-WS批注在WS API中使用: 现在我希望newParam是可选的。我的意思是我希望方法不仅在传递的xml中参数为空时仍然有效: 而且当它不存在时: 我需要它不破坏现有的API,该API在没有新参数的情况下也可以工作。 问题答案: @WebParam将消息部分映射到参数,并且部分不是可选的。请参阅WSDL中的可选消息部分。因此,简短的答案就是您要
这是一个有点乏味的问题...我已经建立了一个WCF来使用WS-Security,在我的日志中看起来像这样: 问题是,为什么同一个名称空间会被引用两次(“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd我知道,只要元素引用的是正确的名称空间,同一名称空间是否被引用两次其实并不重要,但我确
问题内容: 我有一个已导入xsd的wsdl,此xsd具有类似如下的限制: 因此,我想细想一下,当我通过netbeans将这个耳朵部署到glassfish上时,将对传入的数据进行验证,但事实并非如此。在将数据传递给我的@WebService对象并转换为Java对象之前,是否需要进行任何调用以确保数据经过验证。 问题答案: 使用SchemaValidation批注。 请注意,它仅适用于文档/文字样式的
问题内容: 目标 我正在为相当老的(但可悲的是不可更改)的接口实现Web服务。我有一个问题,正在调用我的服务的客户端期望SOAP响应中有某个命名空间,而我很难更改它以使其匹配。 考虑一个世界的例子,我想要这样: 看起来像这样: 我在这里找到了与尝试执行的操作类似的操作,但是在使相似的代码正确执行方面遇到困难。(我想坚持使用Metro,而不必更改为cxf或axis) 执行 我的实现返回如下所示: 该
我正在尝试使用wsse:BinarySecurityToken(ValueType=)验证来自windows密钥库的CA证书http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3),但它通过一个异常失败:java.security.cert.CertPathValidatorExce