您可以强制应用程序忽略 proxyHost 的任何 VM 参数,而只使用运行它的机器的默认代理。您可以编写一个小型 java 程序,它只打印默认代理并在特定框上运行它(例如这个):
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URISyntaxException;
import java.util.Iterator;
import java.util.List;
import java.net.URI;
public class PrintDefaultProxy {
public static void main(String[] args) {
// If you clear these 2 properties then set java.net.useSystemProxies to true, it
// will use the default System Proxy and ignore any settings given to the VM
// e.g. http.proxyHost & http.proxyPort
System.setProperty("http.proxyHost", "");
System.setProperty("http.proxyPort", "");
System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");
List l = null;
try {
String url = "http://google.com.au/";
l = ProxySelector.getDefault().select(new URI(url));
}
catch (URISyntaxException e) {
e.printStackTrace();
}
if (l != null) {
for (Iterator iter = l.iterator(); iter.hasNext();) {
java.net.Proxy proxy = (java.net.Proxy) iter.next();
System.out.println("proxy Type : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if (addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " + addr.getHostName());
System.setProperty("http.proxyHost", addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
}
}
}
}
}
基本上在代码中,如果您清除 http.proxyHost 和 http.proxyPort 然后将 java.net.useSystemProxies 设置为 true,它将使用系统默认代理(如果有)并忽略任何 VM 参数。
System.setProperty("http.proxyHost", "");
System.setProperty("http.proxyPort", "");
System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");
然后你在你的盒子上运行它并传递一些虚假的代理地址:
C:\t>"C:\Program Files\Java\jdk1.6.0_19\bin\java.exe" -Dhttp.proxyHost=99.0.0.99.9 -Dhttp.proxyPort=8080 PrintDefaultProxy
detecting proxies
proxy Type : DIRECT
No Proxy
请注意,如果您不清除这两个属性,它将使用您传递给 JVM 的参数——但据我了解,这不是您的应用程序似乎在做的事情。这是应用程序应该“正常工作”而无需专门设置 proxyHost 的一种方式——这很可能是它忽略您在 JVM/Jboss 级别提供的任何设置的原因。
当行为与您尝试在 Jboss 中更改这些设置时所经历的一致时,这意味着您无法在应用程序或 Jboss 级别将其配置为使用 proxyHost,并且很可能需要在网络级别完成。