Foros del Web » Programación para mayores de 30 ;) » Java »

¿Como puedo obtener el usuario logueado en Windows?

Estas en el tema de ¿Como puedo obtener el usuario logueado en Windows? en el foro de Java en Foros del Web. Hola a todos Estoy creando una aplicación web que requiere obtener el usuario que se ha logueado en Windows para acceder sin necesidad de logueo ...
  #1 (permalink)  
Antiguo 16/01/2006, 15:36
 
Fecha de Ingreso: enero-2006
Mensajes: 5
Antigüedad: 18 años, 3 meses
Puntos: 0
¿Como puedo obtener el usuario logueado en Windows?

Hola a todos

Estoy creando una aplicación web que requiere obtener el usuario que se ha logueado en Windows para acceder sin necesidad de logueo y obtener de una base de datos toda la información correspondiente a ese usuario y mostrarsela.

Necesito que alguien me colabore explicandome la forma de obtener ese usuario desde mi aplicación web.

Gracias de antemano
  #2 (permalink)  
Antiguo 16/01/2006, 21:22
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Hola, Higuita!

Mira, para hacer eso tendrías que utilizar métodos nativos y colarte al API de Windows a través de ellos. Teniendo en cuenta que deseas hacer una aplicación web y teniendo en cuenta que hasta las páginas JSP corren en el lado del servidor y que lo único que Java ejecuta en el lado del cliente son los applets, tendrías que hacer un applet que se ejecute acto seguido de abrir tu página. Para que un applet pueda acceder a los recursos locales de la máquina cliente tiene que estar firmado digitalmente, aunque no creo desde un applet se te permita trabajar con el API de Windows. En todo caso, y si logras hacer eso que deseas, mediante los métodos nativos, estarías restringiendo tu aplicación a que las máquinas cliente tengan Windows instalado. Recuerda además que Java está pensado para una total independencia de la plataforma donde se ejecute (write once run anywhere). Ahora mi recomendación personal: haz una bonita página de logueo para tu aplicación web con un diseño elegante y atractivo.

Hasta pronto!
__________________
El último TipdaR
  #3 (permalink)  
Antiguo 17/01/2006, 02:10
 
Fecha de Ingreso: junio-2005
Mensajes: 286
Antigüedad: 18 años, 10 meses
Puntos: 2
es: write once, debug anywhere LOL
  #4 (permalink)  
Antiguo 17/01/2006, 04:49
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Sonrisa

Una manera que se me ocurre es:

Si desde una shell de dos, puedes obtener un fichero con el nombre del usuario : cmd.exe type nul > c:\%username%

Desde Java :
Código:
public class Usuario {
	public static void main(String[] args){
		Runtime aplicacion = Runtime.getRuntime(); 
        try{aplicacion.exec("cmd.exe type nul > c:\%username%"); }
        catch(Exception e){}

	}
}
Ahora solo tendrias que acceder al nombre del fichero y tendrias el usuario
... una chapuza , pero es lo que se me ocurre ...

.... 5 minutos más tarde .....

Pero si nos miramos en la API la clase System:
Con esto lo tendriamos:
Código:
  String usuario=System.getProperty("user.name");
( http://club.idecnet.com/~ccastano/femepa/170106.htm )

Espero te valga ... Con la salvedad que el código debe correr
en el lado del cliente = ¿ Applet firmado ? o se puede hacer desde un servlet o jsp ...???

Última edición por dogduck; 17/01/2006 a las 06:30
  #5 (permalink)  
Antiguo 17/01/2006, 08:23
 
Fecha de Ingreso: enero-2006
Mensajes: 5
Antigüedad: 18 años, 3 meses
Puntos: 0
Mi problema no lo puedo solucionar con ASP

Hola y gracias por sus respuestas.

El problema que tengo es que estoy trabajando con Tomcat y necesito obtener ese usuario ya sea con JSP o con javascript, no es posible utilizar ASP.

String usuario=System.getProperty("user.name"); esta opción parece interesante pero lo complicado es poder hacer un applet firmado, lo ideal sería poder trabajar desde el servidor.

Espero que alguien me pueda ayudar.
  #6 (permalink)  
Antiguo 17/01/2006, 08:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Como ya se comento en otra ocasion, desde el servidor así de buenas a primeras no se puede, ya que si no el agujero de seguridad sería tremendo.

Y un hay más: todo lo que recibe el servidor enviado por un navegador o un applet se puede falsear, así que para hacerlo seguro en el cliente hay que montar un sistema mas bien complicado.

Es un problema complejo que no tiene solucion simple.

Lo que si hay es una forma en el servidor de comprar si un usuario/pass es valido contra un dominio windows. Lo cual te permitiría usar las mismas credenciales en la aplicacion que en el sistema, pero lo de entrar automaticamente, pues como que forma sencilla no hay.

Pero vamos, ni en Java, ni en PHP, ni en ASP ni en nada que se base en el servidor.
  #7 (permalink)  
Antiguo 17/01/2006, 11:09
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Lo de : String usuario=System.getProperty("user.name");

No es ASP es Java , lo que pasa es que en esa página hablan también de ASP .Net y C#.

Y lo de firmar un Applet , hay 2 links en

http://club.idecnet.com/~ccastano/femepa/090106.htm

para firmar un Applet usando herramientas del SDK y herramientas de Microsoft .

Tras lo que comenta GreenEyed , otra idea seria obtener el usuario de el lado de el cliente , pero ya seria tema de el foro de JavaScript o VBS o ... de todas formas si lo resuelves cuentanoslo

--- 15 minutos más tarde ----
Por cierto he encontrado un artículo sobre ASP .Net donde aseguran que si se puede :"... permite capturar el nombre de usuario de Windows o, si no es viable, redirigir al usuario a una pantalla de inicio de sesión ..."

Está en http://www.microsoft.com/spanish/msd...edSecurity.asp

Ya sé que no es Java/JSP , pero si con ASP se puede apostaria algo a que con JSP , PhP ... también ...
--- 2 horas later ----
Malas noticias : Desde un Applet ( y por razones de seguridad ) no se puede acceder a ciertas propiedades del sistema como :

Por razones de seguridad, los navegadores o los visualizadores de applets no permiten que los applets lean las siguientes propiedades:

Clave Significado
"java.class.path" CLASSPATH de Java
"java.home" Directorio de la Instalación de Java
"user.dir" Directorio de trabajo actual del usuario
"user.home" Directorio Home del usuario
"user.name" Nombre de Cuenta del usuario


( http://www.programacion.com/java/tut...birapplets/31/ )

Última edición por dogduck; 17/01/2006 a las 13:09
  #8 (permalink)  
Antiguo 17/01/2006, 13:17
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
A ver, poderse averiguar se puede averiguar, lo que pasa es que hacerlo desde el lado del cliente para poder entrar en una aplicación web de forma segura es bastante más complicado.
Citando lo que dice el artículo que mencionas...
Cita:
...Probablemente haya pensado en combinar directamente la autenticación por formularios y la autenticación de Windows. Sin embargo, la tarea no es tan sencilla...


PD: El método que menciona sólo funcionaría sobre Explorer, haciendo una aplicación sobre el IIS y usando ASPs, lo cual se integra mejor con Windows que una solución Java, por supuesto .
  #9 (permalink)  
Antiguo 18/01/2006, 07:34
 
Fecha de Ingreso: enero-2006
Mensajes: 5
Antigüedad: 18 años, 3 meses
Puntos: 0
Hola a todos.

Les agradezco su colaboración. Despues de leer sus sugerencias he pensado en obtener el usuario con ASP sobre ISS y luego llamar a mi pagina de inicio enviandole el dato. Parece un poco complicado pero lo intentare.

Espero seguir recibiendo sugerencias que me ayuden a hacerlo directamente con java o javascript.

Mil gracias a todos.
  #10 (permalink)  
Antiguo 18/01/2006, 07:49
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 3 meses
Puntos: 19
Por si te vale de algo , hay otro hilo en el foro de JavaScript

http://www.forosdelweb.com/f13/obtener-nombre-usuario-del-sistema-364521/

  #11 (permalink)  
Antiguo 24/04/2009, 10:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 1
Antigüedad: 19 años, 6 meses
Puntos: 0
De acuerdo Respuesta: ¿Como puedo obtener el usuario logueado en Windows?

En C# es asi:

string sUserDominioRed = Context.Request.ServerVariables["AUTH_USER"];
sUserDominioRed = sUserDominioRed.Split('\\')[1];

Espero que te ayude..
  #12 (permalink)  
Antiguo 28/04/2009, 22:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 39
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: ¿Como puedo obtener el usuario logueado en Windows?

Tengo lo que buscas. en su día me recorri todo google. lo debes meter en el jsp de entrada porque hace un par de llamadas a si mismo.
Código:
        String username="";
	String auth = request.getHeader("Authorization");
	if (auth == null)
	{
	  response.setStatus(response.SC_UNAUTHORIZED);
	  response.setHeader("WWW-Authenticate", "NTLM");
	  response.flushBuffer();
	  return;
	}
	if (auth.startsWith("NTLM "))
	{
	  
	  byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
	  int off = 0, length, offset;
	  if (msg[8] == 1)
	  {
	    byte z = 0;
	    byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S', (byte)'S', (byte)'P', 
	      z,(byte)2, z, z, z, z, z, z, z,(byte)40, z, z, z, 
	      (byte)1, (byte)130, z, z,z, (byte)2, (byte)2,
	      (byte)2, z, z, z, z, z, z, z, z, z, z, z, z};
	    response.setHeader("WWW-Authenticate", "NTLM " + new sun.misc.BASE64Encoder().encodeBuffer(msg1));
	    response.sendError(response.SC_UNAUTHORIZED);
	    return;
	  }
	  else if (msg[8] == 3)
	  {
		
	    off = 30;
	
	    length = msg[off+17]*256 + msg[off+16];
	    offset = msg[off+19]*256 + msg[off+18];
	    String remoteHost = new String(msg, offset, length);
	
	    length = msg[off+1]*256 + msg[off];
	    offset = msg[off+3]*256 + msg[off+2];
	    String domain = new String(msg, offset, length);
	
	    length = msg[off+9]*256 + msg[off+8];
	    offset = msg[off+11]*256 + msg[off+10];
	    username = new String(msg, offset, length);
	
	    System.out.println("Username:"+username);
	    System.out.println("RemoteHost:"+remoteHost);
	    System.out.println("Domain:"+domain);
	  }
}

Última edición por sachablade; 29/04/2009 a las 04:40 Razón: SOLUCIÓN
  #13 (permalink)  
Antiguo 23/01/2010, 17:39
 
Fecha de Ingreso: enero-2010
Mensajes: 1
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: ¿Como puedo obtener el usuario logueado en Windows?

Utiliza este atributo

Page.User.Identity.Name;

Te devuelve directamente el Dominio y el Usuario de Windows con que el usuario inicio sesión.

ejemplo: mydominio\myusuario

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:01.