我有一个加载服务器应用程序,可在两个应用程序之间切换,App1&应用2。每个应用程序都有自己的IFrame与银行对话,但当银行返回数据时,加载服务器无法区分哪个应用程序。我对此进行了调查,然后我发现它是代理问题。
因此,我试图强制该应用程序使用proxyHost
& proxyport
但它没有用,然后我强迫Jboss使用特定的proxyHost
& proxyport
但它也没有用。它在盒子上使用默认代理,它不关心我的配置。
设置proxyHost
& Jboss启动脚本proxyPort
上的bin\run.bat
:
Jboss日志显示它在我们运行时接受了java VM参数(例如-Dhttp.proxyHost=XX.XX.XX.XX -Dhttp.proxyPort=8080
)
在应用程序中,它仍然会通过框中的默认代理设置。
我在google& stackoverflow并尝试了不同的想法,但没有奏效。 有人可以对此有所了解吗?
答案 0 :(得分:0)
您是否可以尝试使用以下JVM args运行您的应用:-Dsun.net.inetaddr.ttl=0 -Dnetworkaddress.cache.ttl=0
?
成功请求后,DNS设置会被缓存,这些参数将禁用缓存。
答案 1 :(得分:0)
您可以强制应用程序忽略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,并且很可能需要在网络上完成水平。