java - exclude - Autenticación Proxy J2SE
proxy java example (4)
Usamos 2 Microsoft ISA Proxy Server 2003 SIMILARES para conectarnos a internet. Cada proxy tiene un estilo de inicio de sesión diferente, como se muestra a continuación:
Server-1: nt-domain / alan Server-2: [email protected]
Iniciar sesión en IE, Firefox y mi Phonecell a través de Wifi, todo está bien. Pero aparece un problema cuando ejecutamos una aplicación java J2SE Ver 4, 5 y 6, donde necesita autenticación de Internet. El inicio de sesión en el Servidor-2 es correcto, pero FALLA en el Servidor-2 (estilo: [email protected]).
Nota: Ambos proxy vistos utilizando la autenticación de Windows, escriba: negotiate NTLM
Appreceate si puedes ayudar o para cualquier sugerencia.
Gracias,
Alan L
¿Estás ejecutando una aplicación o un applet? Un applet puede aprovechar el mecanismo de autenticación proxy del navegador.
Yo sugeriría usar cURL para conectarse a través de su proxy primero, y ver el apretón de manos que ocurre. El servidor proxy ofrecerá al cliente una lista de métodos de autenticación.
Si el usuario y la contraseña son correctos, a veces puede simplemente sacar el encabezado de la sesión de su navegador y usarlo en su código. Por ejemplo, puedo agregar este encabezado a una solicitud, y el proxy me verá como autenticado:
Proxy-Authorization: Basic AbCdEfGhOjk==
Usando apache-commons httpClient (versión 3), tengo el siguiente código. No está bien probado (si es que lo es), pero creo que funcionó una vez ... :) Esto es en caso de que puedas modificar los programas ... si son paquetes de terceros, nada que puedas hacer.
String proxyHost = System.getProperty("https.proxyHost");
int proxyPort = 0;
try {
proxyPort = Integer.parseInt(System
.getProperty("https.proxyPort"));
} catch (Exception ex) {
//
}
System.setProperty("java.net.useSystemProxies", "true");
ProxySelector ps = ProxySelector.getDefault();
List<Proxy> proxyList = ps.select(new URI(targetUrl));
Proxy proxy = proxyList.get(0);
if (proxy != null) {
InetSocketAddress addr = ((InetSocketAddress) proxy
.address());
if (addr != null) {
proxyHost = addr.getHostName();
proxyPort = addr.getPort();
}
}
boolean useProxy = proxyHost != null && proxyHost.length() > 0;
if (useProxy) {
httpClient.getHostConfiguration().setProxy(proxyHost,
proxyPort);
}
Existen algunas buenas bibliotecas que pueden ayudarlo a superar este problema. Proxy Vole (Detección automática de proxy de red para Java) puede ayudarle a usar la misma configuración de proxy que Internet Explorer para autenticarse a través del proxy.
Para proporcionar conectividad de red de la caja para su aplicación Java, puede usar la biblioteca Proxy - Vole. Proporciona algunas estrategias para autodetectar la configuración de proxy actual. Hay muchas estrategias configurables para elegir. Por el momento, Proxy - Vole admite las siguientes estrategias de detección de proxy.
- Configuración de la plataforma de lectura (Admite: Windows, KDE, Gnome)
- Lea la configuración del navegador (Admite: Firefox 3.x, Internet Explorer)
- Variables de entorno de lectura (variables de uso frecuente en sistemas de servidor Linux / Unix)
- Secuencia de comandos de detección automática mediante WPAD / PAC (solo se admiten algunas características)
La documentación de Java describe cómo habilitar la autenticación NTLM en Java. Si tiene acceso a la fuente, puede agregar las propiedades del sistema de forma programática como se describe en el artículo "proxy" , agregando algo de la siguiente manera (consulte también la explicación de axis2):
System.setProperty("http.auth.ntlm.domain", mydomain);
Si no tiene acceso a la fuente, puede establecer propiedades en la línea de comando que inicia su binario Java, agregando algo como:
java -DproxyHost=host -DproxyPort=8080 -Dhttp.auth.ntlm.domain=mydomain ...