JavaアプレットでNettyを使用して、Tomcatサーバーと通信します。これは完全に機能します。
下記のヘルパークラスを利用してプロキシ情報を取得することができます。
私の質問は、プロキシサーバー情報をNettyに提供するにはどうすればよいですか?
詳しくは:
InternetExplorerでプロキシサーバーを構成したユーザーがいます。WebページとJavaアプレットは提供されますが、Nettyが接続しようとすると、プロキシサーバーをバイパスして直接接続します。ユーザーが直接接続を防ぐようにファイアウォールを設定しているため、これは失敗します。すべてのクライアント接続はプロキシサーバーを経由する必要があります。
プロキシ情報を取得するためのヘルパーコード:
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
public class ProxyConfig {
private static final String JAVA_NET_USE_SYSTEM_PROXIES = "java.net.useSystemProxies";
private static String host;
private static int port;
private static String protUrlStr = null;
public static void init(URL url) {
// http://10.0.1.136
protUrlStr = url.getProtocol() + "://" + url.getHost();
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "true");
Proxy proxy = getProxy();
if(proxy != null) {
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if(addr != null) {
host = addr.getHostName();
port = addr.getPort();
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "false");
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port + "");
}
}
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "false");
}
public static String getHost() {
return host;
}
public static int getPort() {
return port;
}
private static Proxy getProxy() {
List<Proxy> l = null;
try {
ProxySelector def = ProxySelector.getDefault();
System.out.println("Getting List<Proxy> for URL = " + protUrlStr);
l = def.select(new URI(protUrlStr));
ProxySelector.setDefault(null);
} catch (Exception e) {
e.printStackTrace();
}
if(l != null) {
for(Iterator<Proxy> iter = l.iterator(); iter.hasNext();) {
java.net.Proxy proxy = iter.next();
return proxy;
}
}
return null;
}
}