java - CXF + wsdl2java + 认证

标签 java web-services cxf

我使用 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 请求中显然缺少授权 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 生成的类。

关于java - CXF + wsdl2java + 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513558/

相关文章:

c# - 如何通过网络服务流式传输文档?

java - 通过 CXF 配置基于 SSL 的 JAX-WS

java - 丢失代码签名证书别名

java - HTTP 状态 500 - Glassfish 上的内部服务器错误

java - 事务可以跨越多个具有无状态+事务范围的持久性上下文的业务方法吗

java - 在android中通过soap ws在mysql数据库中插入微调器值

.net - 尝试将 Android 应用程序连接到 .NET ".svc"Web 服务和服务器响应不支持媒体类型

java - CXF "No Message body reader found"用于 POST 服务中的字节数组参数

java - CXF、Camel 和 Spring 线程阻塞问题

java - 如何在不使用控制流异常的情况下根据模式验证 XML?