アプリケーションが 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
これら 2 つのプロパティをクリアしないと、JVM に渡す引数が使用されることに注意してください。ただし、私の理解では、アプリケーションが実行しているようには見えません。これは、proxyHost を具体的に設定しなくても、アプリケーションが「そのまま機能する」方法です。これが、JVM/Jboss レベルで指定した設定を無視する理由である可能性が最も高いです。
動作が Jboss でこれらの設定を変更しようとして経験したことと一致している場合、proxyHost を使用するようにアプリケーションまたは Jboss レベルで設定することはできず、ネットワーク レベルで行う必要がある可能性が高いことを意味します。