答案 0 :(得分:0)
SOAP Web服务中的处理程序(类似于拦截器/过滤器)可用于服务器端的身份验证目的,然后进一步链接请求。 请查看SOAPHandler以解析有效负载中的标头信息并验证用户名/密码。 SOAP Handler at Server Side
答案 1 :(得分:0)
以下是执行此操作的一些步骤:
SOAPHandler
方法实现handleMessage
类。handleMessage
方法中,评估上下文的MESSAGE_OUTBOUND_PROPERTY
。如果它为假(意味着它是入站消息),则编写内省context.getMessage()
的代码。在那里,您可以评估MIME标头,安全标头和安全标题。令牌和正文,以确定您是否需要拒绝身份验证凭据。如果您这样做,请在方法结束时返回false
。SoapHander
添加到服务的处理程序链。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)
{
}
这是您需要添加到服务的handlerChain的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.Handler1 examples.webservices.handler.Handler2
有关完整指南,请参阅Oracle's guide to creating SOAPHandlers