繁体   English   中英

CXF + wsdl2java +身份验证

[英]CXF + wsdl2java + authentication

我使用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生成的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM