首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CXF + wsdl2java +认证

CXF + wsdl2java +认证
EN

Stack Overflow用户
提问于 2015-05-28 17:42:24
回答 1查看 2.5K关注 0票数 3

我使用wsdl2java命令从WSDL为我的客户机创建了jar。现在,我需要知道如何对我的客户进行身份验证才能完成操作?

我使用的是CXF 2.7.16。我使用生成的类MyApp_Service创建了我的服务,我正在努力解决这个问题。难道没有一种简单的方法告诉我的客户它应该使用什么凭证来访问web服务吗?

我读过关于Spring配置的文章,但是我不知道它是否适用于我的情况,如果是的话如何。为了使用包含用户名和密码属性的方法,我尝试将MyApp_Service类转换为BindingProvider。但是,不能将MyApp_Service转换为BindingProvider。

这是我第一个web服务客户端应用程序。因此,任何帮助都将受到欢迎。

更新2015-05-28:我试图定义AuthenticationPolicy,但似乎不起作用.以下是代码:

代码语言:javascript
复制
        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中丢失。

少了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-28 22:33:40

问题解决了,以下是解决方案:

代码语言:javascript
复制
        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生成的类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30513558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档