Apache Axis 中的抢占式身份验证方法?



有点明白我正在使用Apache Axis 1.4来查询Web服务。

我得到了一个WSDL文件,该文件生成了一个扩展org.apache.axis.client.ServiceXXXXImplServiceLocator类,并实现了扩展javax.xml.rpc.Service的生成接口。

我的"业务代码"在一个新的XXXXImplServiceLocator实例上调用getXXXXImplPort(URL)方法,然后调用:

((Stub) port).setTimeout(timeout);
((Stub) port).setUsername(username);
((Stub) port).setPassword(password);

Stuborg.apache.axis.client.Stub.

设置这些参数后,我只需调用一些getYYY()方法,该方法表示对远程服务公开的服务之一的查询,并返回一个包含结果的"域"对象。

问题是我必须对此服务使用抢占式身份验证。我尝试通过 soapUI 进行查询,除非我设置抢占式身份验证模式,否则不会有任何结果。

我尝试在谷歌上搜索如何设置该模式,但一无所获。他们所说的只是使用 Apache HttpClient 的先发制人身份验证,它可以很好地"嵌入"或被安讯士使用,但我真的不知道如何混合使用。

我唯一与此ServiceLocator交互的代码是初始设置,然后只是查询。

如何设置抢占式身份验证模式?我错过了什么吗?我不明白什么,所以我无法解决这个问题?

闻起来像一个非常微不足道的问题,但也许我不太了解这一事实阻止了我解决问题。

提前谢谢,是的:)

要强制 Apache Axis 使用抢占式身份验证,请按如下所示设置用户名和密码:

import org.apache.axis.client.Call;
import org.apache.axis.client.Stub;
....
....
((Stub) client)._setProperty(Call.USERNAME_PROPERTY, "username");
((Stub) client)._setProperty(Call.PASSWORD_PROPERTY, "password");

也就是说,如果您仍然想使用 Apache HttpClient 作为传输,您可以通过在安讯士客户端配置文件中设置以下内容来实现,在我的例子中是client_config.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
.....
.....
<!-- use CommonsHTTPSender instead of the default HTTPSender -->
<!-- <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender" /> -->
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />
.....
.....
</deployment>

我从这里得到了以上内容。

您可以使用 Apache Rampart 模块来实现 WS 安全性。 它在服务级别插入,并将处理WS-Security的所有事情,如用户名/令牌,X.509身份验证等。

这不是微不足道的,但也不是那么困难。 我们在这里这样做是为了让安讯士服务器使用 WSS 与 Oracle SOA 服务器进行通信。

相关内容

最新更新