CXF + wsdl2java + 认证
CXF + wsdl2java + authentication
我使用 wsdl2java 命令从 WSDL 为我的客户端创建了 jar。现在,我需要知道如何验证我的客户端才能完成操作?
我正在使用 CXF 2.7.16。我使用生成的 class MyApp_Service 创建了我的服务,我正在努力解决这个问题。有没有一种简单的方法可以告诉我的客户应该使用哪些凭据来访问 Web 服务?
我阅读了 Spring 配置,但我无法弄清楚它是否适用于我的情况以及如果适用的话如何。我试图将 MyApp_Service class 转换为 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 请求中显然缺少授权 header。
缺少什么?
问题已解决,解决方法如下:
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生成的类。
我使用 wsdl2java 命令从 WSDL 为我的客户端创建了 jar。现在,我需要知道如何验证我的客户端才能完成操作?
我正在使用 CXF 2.7.16。我使用生成的 class MyApp_Service 创建了我的服务,我正在努力解决这个问题。有没有一种简单的方法可以告诉我的客户应该使用哪些凭据来访问 Web 服务?
我阅读了 Spring 配置,但我无法弄清楚它是否适用于我的情况以及如果适用的话如何。我试图将 MyApp_Service class 转换为 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 请求中显然缺少授权 header。
缺少什么?
问题已解决,解决方法如下:
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生成的类。