我们使用2个SIMILAR Microsoft ISA Proxy Server 2003连接到互联网。 每个代理具有不同的登录样式,如下所示:
Server-1:nt-domain \ alan Server-2:alan@love-u.com
通过Wifi登录IE,Firefox和我的Phonecell都很好。 但是,当我们运行java应用程序J2SE Ver 4,5和6时会出现问题, 它需要互联网认证的地方。 登录到Server-2是正常的,但是对于Server-2,则为FAIL(样式:alan@domain.com)。
注意:使用Windows身份验证看到的两个代理都输入:negotiate NTLM
如果您可以提供帮助或任何建议,请致谢。
谢谢,
Alan L
答案 0 :(得分:3)
java documentation描述了如何在java中启用NTLM身份验证。如果您有权访问源代码,则可以按照"proxy"文章中的说明以编程方式添加系统属性,添加如下内容(另请参见axis2的discussion):
System.setProperty("http.auth.ntlm.domain", mydomain);
如果您无权访问源,则可以在启动java二进制文件的命令行上设置属性,添加如下内容:
java -DproxyHost=host -DproxyPort=8080 -Dhttp.auth.ntlm.domain=mydomain ...
答案 1 :(得分:2)
有一些好的库可以帮助您克服这个问题。 Proxy Vole(Java的网络代理自动检测)可以帮助您使用与Internet Explorer相同的代理设置通过代理进行身份验证。
要为Java应用程序提供开箱即用的网络连接,您可以使用Proxy-Vole库。它提供了一些自动检测当前代理设置的策略。有许多可配置的策略可供选择。目前,Proxy-Vole支持以下代理检测策略。
- 阅读平台设置(支持:Windows,KDE,Gnome)
- 阅读浏览器设置(支持:Firefox 3.x,Internet Explorer)
- 读取环境变量(Linux / Unix服务器系统上经常使用的变量)
- 使用WPAD / PAC自动检测脚本(仅支持某些功能)
答案 2 :(得分:0)
您是在运行应用程序还是小程序? applet可以依赖浏览器的代理身份验证机制。
我建议先使用cURL连接代理,然后查看发生的握手。代理服务器将为客户端提供一系列身份验证方法。
如果用户和密码已修复,您有时可以从浏览器会话中取出标题,并在代码中使用它。例如,我可以将此标头添加到请求中,代理会将我视为已通过身份验证:
Proxy-Authorization: Basic AbCdEfGhOjk==
答案 3 :(得分:0)
使用apache-commons httpClient(版本3),我有以下代码。它没有经过良好测试(如果它完全没有),但我认为它曾经工作过一次.. :) 这是为了你可以修改程序..如果他们是一些第三方包,你无能为力。
String proxyHost = System.getProperty("https.proxyHost");
int proxyPort = 0;
try {
proxyPort = Integer.parseInt(System
.getProperty("https.proxyPort"));
} catch (Exception ex) {
//
}
System.setProperty("java.net.useSystemProxies", "true");
ProxySelector ps = ProxySelector.getDefault();
List<Proxy> proxyList = ps.select(new URI(targetUrl));
Proxy proxy = proxyList.get(0);
if (proxy != null) {
InetSocketAddress addr = ((InetSocketAddress) proxy
.address());
if (addr != null) {
proxyHost = addr.getHostName();
proxyPort = addr.getPort();
}
}
boolean useProxy = proxyHost != null && proxyHost.length() > 0;
if (useProxy) {
httpClient.getHostConfiguration().setProxy(proxyHost,
proxyPort);
}