我已经使用JAX-WS创建了Web服务,并试图向Web服务添加简单UsernameToken安全性。该应用程序已部署在Websphere 8.5上。
我发现以下链接对于基于JAX-RPC的Web服务非常容易地从 RAD->服务选项卡 添加usernameToken,但是该功能不可用 JAX-WS 类型的Web服务。
RAD - How to add username token for JAX RPC in websphere application server admin console
有人可以提供一些类似的步骤或其他可能的简单解决方案来实现JAX-WS Web服务吗?
<Soapenv:Header>
<wsse:Security soapenv: mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>user</wsse: Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wssusername-token-profile-1.0#PasswordText">paas</wsse: Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
谢谢。
答案 0 :(得分:0)
最后,我设法找到了解决上述问题的方法。如下:
在大量搜索之后,我遇到了 Web服务处理程序 的概念,可以针对从Webservice Provider接收或发送的每个请求和响应调用该概念分别。
如何配置: 1.创建一个Java File SecurityHandler,并将以下代码粘贴到其中:
public class SecurityHandler implements SOAPHandler<SOAPMessageContext>
{
@Override
public boolean handleMessage(SOAPMessageContext context)
{
boolean outbound = (Boolean)context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(outbound) {
//logic to handle a response
}
if (!outbound) {
//logic to handle a request
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public void close(MessageContext context) {}
@Override
public Set<QName> getHeaders() {
return Collections.emptySet();
}
}
使用以下代码示例创建XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>your.package.path.SecurityHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
要针对您公开的每个Web服务请求或响应激活处理程序,请在Web服务类中添加注释,如下所示:
@HandlerChain(file="/your/package/path/handler-chain.xml") public class my web services { //methods or web-services to be exposed. }