我对系统代理检测有一些神秘的问题: 实际上,我有正确的代码在运行时检测系统代理设置,它也可以处理pac文件和http代理设置。 当我在目标站上存储和执行所有内容时,它的工作绝对正确。
但是:我在目标站上运行一小段代码并将其他任何东西(罐子)存储在另一个站点上,运行apache webserver。从主要我用URLClassloader加载类,以便通过网络加载代码片段,负责代理检测。通过这种方式,默认代理选择器一直给DIRECT,它无法找到正确的设置。
我认为,问题是我想设置
System.setProperty("java.net.useSystemProxies","true");
在加载的类中,以某种方式这不起作用...但是当我sysout属性值时,它是true
。
我写了一个小测试程序,唯一的区别是:
A)
Class.forname("a"); -> a is in the classpath
B)
URL[] url = new URL[1];
url[0] = new URL("http://1.2.3.4/dtfw");
URLClassloader u = new URLClassloader(url);
Class.forname("a", true, u);
这两段代码都有效,唯一不同的是输出。 有没有人有一些想法?
提前致谢!!
Zsomi
答案 0 :(得分:0)
我找到了问题的根本原因:
DefaultProxySelector是每个JVM的单例,它的行为基于System.setProperty(“java.net.useSystemProxies”,“true”);是否设定。
当URLClassloader使用它时,该值在实例化时为false。当我在“a”类中尝试使用它时,它无法找到系统代理设置,因为在instatiation中没有设置此属性。
所以我有原因,但还没有解决方案。
此致 Zsomi