我正在尝试使用apache cxf 2.4.0使用WS-Security UsernameToken规范1.0连接到Web服务.
我已经从CXF文档中复制了下面的代码,但是我得到了:org.apache.cxf.ws.policy.PolicyException:没有可用的用户名
MyService_Service ss = new MyService_Service(wsdlURL, SERVICE_NAME);
MyService port = ss.getBasicHttpBindingMyService ();
Client client = ClientProxy.getClient(port);
Endpoint cxfEndpoint = client.getEndpoint();
Map<String,Object> outProps = new HashMap<String,Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "USERNAME");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,
ClientPasswordHandler.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
cxfEndpoint.getOutInterceptors().add(wssOut);
Run Code Online (Sandbox Code Playgroud)
我还从文档中实现了一个ClientPasswordHandler类,但似乎从未发送用户名(根据错误).这是密码处理程序:
public class ClientPasswordHandler implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setPassword("Password");
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法看看是否正在应用WSS4Jinterceptor,并且发送了UsernameToken?
我正在使用直接从CXF网站复制的CXF配置文件:cxf.apache.org/docs/client-http-transport-includes-ssl-support.html
但是,当我运行程序时,XML不会验证。给出的错误是:不允许属性'disableCNcheck'出现在元素'http-conf:tlsClientParameters'中
我们正在测试环境中使用自签名证书,只需要快速解决方法即可使用服务!
这是我尝试使用的cxf.xml文件,感谢您的帮助!
<http-conf:conduit
name="{https://hostname/service}MyService.http-conduit">
<!-- deactivate HTTPS url hostname verification (localhost, etc)
WARNING ! disableCNcheck=true should NOT be used in production-->
<http-conf:tlsClientParameters disableCNcheck="true" />
</http-conf:conduit>
Run Code Online (Sandbox Code Playgroud)