Necesito consumir un descanso de servicio web con java, pasar las credenciales de una cuenta de usuario de dominio.

ahora mismo estoy haciendo con asp clásico


set xmlHttp = server.createObject( "msxml2.serverxmlhttp" )
xmlHttp.open method, url, false, domain & "\" & user, password
xmlHttp.send body
out = xmlHttp.responseText
set xmlHttp = nothing

y con asp.net



HttpWebRequest request = (HttpWebRequest) WebRequest.Create( url );

request.Credentials = new NetworkCredential(user, password, domain);

request.Method = WebRequestMethods.Http.Get

HttpWebResponse response = (HttpWebResponse) request.GetResponse();

StreamReader outStream = new StreamReader( response.GetResponseStream(), Encoding.UTF8) ;

output = outStream.ReadToEnd();

¿cómo puedo lograr esto con java? Tome en cuenta que no estoy utilizando las credenciales del usuario actualmente conectado, estoy especificando la cuenta de dominio (tengo la contraseña)

por favor, dime que es tan fácil como con asp clásico y asp.net….

OriginalEl autor opensas | 2009-07-22

3 Comentarios

  1. 0

    Según esta página, puede utilizar el built-in JRE clases, con la advertencia de que las versiones anteriores de Java sólo puede hacer esto en una máquina Windows.

    Sin embargo, si usted está dispuesto a vivir con la 3ª parte de la dependencia, de la OMI Apache Commons HttpClient 3.x es el camino a seguir. Aquí es la documentación para el uso de autenticación, incluyendo NTLM. En general, HttpClient es mucho más funcional de la biblioteca.

    La última versión de HttpClient es 4.0, pero al parecer, esta versión no admite NTLM esta versión requiere un poco de trabajo extra.

    Aquí es lo que yo pensar el código sería, aunque yo no lo he probado:

    HttpClient httpClient = new HttpClient();
    httpClient.getState().setCredentials(AuthScope.ANY, new NTCredentials(user, password, hostPortionOfURL, domain));
    GetMethod request = new GetMethod(url);
    BufferedReader reader = new InputStreamReader(request.getResponseBodyAsStream());

    Buena suerte.

    Hey Matt, muchas gracias por tu respuesta, pero me pregunto si es posible hacer esto, con el buil-en JRE clases, mediante el uso de kerberos en lugar de ntlm… quiero decir, kerberos no es ptopietary cosas como NTLM…
    Lo último que escuché, el Apache cliente NO admite NTLMv2. Y son reacios a toque JCIFS porque) ellos dicen que es LGPLv2 no es compatible con su licencia y b) son generalmente están cansados de MS cosas. Pero no importa, porque si queremos interoperabilidad con Microsoft, NTLM es el común denominador de mecanismos de autenticación. Kerberos no funciona si el cliente no tiene acceso a un controlador de dominio o si el tiempo de sincronización está desactivada o si el DNS no está muy bien o … etc.
    Hola ioplex. No estoy seguro de que has oído esto, pero es incorrecto. Por favor, lea la documentación que he ligado. He utilizado con éxito NTLM con tanto HttpClient 3.x y con 4.0.
    El primer enlace está roto.

    OriginalEl autor Matt Solnit

  2. 0

    Una solución compatible para java.net.URLStreamHandler y java.net.URL es com.intersult.net.http.NtlmHandler:

    NtlmHandler handler = new NtlmHandler();
    handler.setUsername("domain\username");
    handler.setPassword("password");
    URL url = new URL(null, urlString, handler);
    URLConnection connection = url.openConnection();

    Usted también puede usar java.net.Proxy dentro de la url.openConnection(proxy).

    Uso De Maven-Dependencia:

        <dependency>
            <groupId>com.intersult</groupId>
            <artifactId>http</artifactId>
            <version>1.1</version>
        </dependency>

    OriginalEl autor Tires

  3. -2

    Echar un vistazo a la SpnegoHttpURLConnection clase en la SPNEGO Servlet HTTP Filtro de proyecto. Este proyecto tiene algunos ejemplos así.

    Este proyecto tiene un la biblioteca de cliente que prácticamente hace lo que usted está haciendo en su ejemplo.

    Echa un vistazo a este ejemplo de la javadoc…

     public static void main(final String[] args) throws Exception {
         final String creds = "dfelix:[email protected]";
    
         final String token = Base64.encode(creds.getBytes());
    
         URL url = new URL("http://medusa:8080/index.jsp");
    
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
         conn.setRequestProperty(Constants.AUTHZ_HEADER
                 , Constants.BASIC_HEADER + " " + token);
    
         conn.connect();
    
         System.out.println("Response Code:" + conn.getResponseCode());
     }
    realmente funciona w/o de cualquiera de las librerías con el código de conn.setRequestProperty(«Autorización», «Basic» + «» + token);
    Esto no contesta la pregunta. Esta solución funciona para la autenticación Básica, pero no funciona para Kerbos o la autenticación NTLM como el que pide la pregunta.

    OriginalEl autor Pat Gonzalez

Dejar respuesta

Please enter your comment!
Please enter your name here