我使用wsdl2java命令从WSDL为客户端创建了jar。现在,我需要知道如何对客户端进行身份验证才能完成操作?
我正在使用CXF 2.7.16。我使用生成的类MyApp_Service创建了我的服务,对此我很挣扎。是否有一种简单的方法来告诉我的客户端获取Web服务访问权时应使用的凭据?
我阅读了有关Spring配置的信息,但是我无法确定它是否适用于我的情况以及如何确定。我试图将MyApp_Service类强制转换为BindingProvider,以便使用该方法,该方法包括将USERNAME和PASSWORD属性放在带有值的上下文中。但是,MyApp_Service无法强制转换为BindingProvider。
这是我有史以来第一个Web服务客户端应用程序。因此,任何帮助都将受到欢迎。
更新2015-05-28:我试图定义AuthenticationPolicy,但似乎不起作用。这是代码:
Client client = JaxWsDynamicClientFactory.newInstance().createClient(wsdlUrl);
ClientImpl clt = (ClientImpl) client;
HTTPConduit cc = (HTTPConduit) clt.getConduit();
org.apache.cxf.configuration.security.ObjectFactory secOF = new org.apache.cxf.configuration.security.ObjectFactory();
AuthorizationPolicy ap = secOF.createAuthorizationPolicy();
ap.setUserName(usagerWS);
ap.setPassword(mdpWS);
ap.setAuthorizationType("Basic");
cc.setAuthorization(ap);
用WireShark嗅探,HTTP请求中显然缺少Authorization标头。
什么不见了?
最佳答案
解决了问题,以下是解决方法:
MyApp_Service service = new MyApp_Service(wsdlUrl, new QName(namespace, serviceName));
MyApp port = service.getMyApp();
// Set credentials
Map<String, Object> reqCtxt = ((javax.xml.ws.BindingProvider) port).getRequestContext();
reqCtxt.put(javax.xml.ws.BindingProvider.USERNAME_PROPERTY, username);
reqCtxt.put(javax.xml.ws.BindingProvider.PASSWORD_PROPERTY, password);
不再使用动态客户端。仅使用由wsdl2java生成的类。