【发布时间】:2011-05-05 23:54:58
【问题描述】:
我正在编写一个 Java 1.5+ 客户端,它需要从 IIS 托管的 Web 服务中获取数据。我在 Eclipse 中创建了一个新的 Web 服务客户端,并在生成客户端代理时使用了 Java 代理客户端类型和 Apache Axis2 Web 服务运行时。 Web 服务本身在 Windows 2003 上运行,并且安全性设置为仅使用 Windows 集成身份验证。我在网上找到了很多文章,展示了如何从 Java 客户端成功连接到这个 IIS 服务,但我所看到的一切似乎都要求我将用户名和密码放在我的 Java 客户端代码中的某个地方。
我的 Java 客户端将在 Windows 计算机上运行,该计算机与 IIS 服务位于同一 Active Directory 网络上(即我每天登录的帐户都可以访问该服务)。我希望我的 Java 客户端在登录用户的上下文中运行,而无需在代码中输入我的登录凭据。这是我当前的代码,它可以工作,但需要我在代码中输入用户名和密码:
final NTCredentials nt = new NTCredentials("my_username", "my_password", "", "my_domain");
final CredentialsProvider myCredentialsProvider = new CredentialsProvider() {
public Credentials getCredentials(final AuthScheme scheme, final String host, int port, boolean proxy) throws CredentialsNotAvailableException {
return nt;
}
};
DefaultHttpParams.getDefaultParams().setParameter("http.authentication.credential-provider", myCredentialsProvider);
但我真的不想在代码中输入用户名和密码——我希望它使用运行 Java 客户端的登录 Windows 用户的凭据运行。
我应该使用什么代码来连接登录用户的凭据而不需要指定用户名和密码?这可能吗?
【问题讨论】:
-
Shawn - Axis2 不(我相信)直接包含 HTTP 客户端代码。我使用 Axis 已经有一段时间了,但那时它需要 Apache httpclient 3。你能确认你正在使用 Axis2 和 HTTPClient 3 吗?
-
我没有做任何具体的事情来查看或使用 HTTPClient3。我所做的是 1) 右键单击该项目并创建一个新的 Web 服务客户端:右键——新建——其他——Web Services——Web Service Client b.单击下一步 c.指向 Web 服务 WSDL d.将 Meter 设置为最低级别(开发客户端) e.单击 Web 服务运行时的配置链接 – 选择 Apache Axis2 f。完成 2) 使用生成的代理类来使用服务
标签: java security axis2 windows-authentication credentials