Como "capturar" o login do usuário de rede?

13 respostas
X

Pessoal, boa tarde!

Estou tendo problemas em pegar o usuário logado na rede.
Ocorre o seguinte, estou utilizando a função:

System.getProperty("user.name");

Mas com esta função eu estou pegando o usuário logado na máquina e com isso me é retornado sempre o usuário logado na máquina servidora da aplicação. Se alguém tiver uma dica ou souber de alguma função que retorne o usuário da rede, ficarei imensamente grato!

13 Respostas

T

http://www.guj.com.br/posts/list/26264.java

X

Obrigado, vou tentar conforme a indicação!

X

Thingol, será que pode me ajudar?

Segui todos os passos de sua dica, mas estou recebendo o seguinte erro ao iniciar minha webapp:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.net.UnknownHostException: ABC.DEFGHIJ.O

jcifs.netbios.NameServiceClient.getAllByName(NameServiceClient.java:307)

jcifs.netbios.NbtAddress.getAllByName(NbtAddress.java:463)

jcifs.smb.SmbSession.getChallengeForDomain(SmbSession.java:99)

jcifs.http.NtlmHttpFilter.negotiate(NtlmHttpFilter.java:157)

jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:121)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

Alterei o nome do meu domínio aqui, mas usando o exemplo: Eu configuro como domínio ABC.DEFGHIJ.ORG e na tela de erro aparece ABC.DEFGHIJ.O
Não sei se isso é relevante, mas tem essa diferença.
Achei que o erro fosse por conta do nome de domínio incorreto, mas não está incorreto…

Desde já agradeço,
Xande_cf.

T

Espera um pouquinho. Qual é o domínio na sua rede Windows, e há um servidor de domínio na sua rede? É estranho o domínio ser “ABC.DEFGHIJ.ORG”. Conforme você deve ter percebido, o nome do domínio que ele está pegando deve ter umas 13 letras no máximo (nem sei de onde vem isso, são coisas do Windowz).

X

Obrigado por responder thingol!

A rede tem um domínio sim! Eu postei ABC.DE… apenas como exemplo para explicar o que está acontecendo e não postar o nome real.

T

Uma coisa que é chata é que não sei se o JCIFS funciona em uma rede Windows que tenha apenas servidores Windows 2003 ou 2008; eu sei que ele funciona em redes Windows mais antigas (onde o ActiveDirectory funciona em paralelo com o antigo modelo de redes do Windows NT). Talvez você esteja enfrentando esse problema.

X

Olá consegui receber o login de usuário, mas toda hora da o seguinte erro durante o uso do sistema:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

jcifs.smb.SmbException: NTLMv2 requires extended security (jcifs.smb.client.useExtendedSecurity must be true if jcifs.smb.lmCompatibility >= 3)

jcifs.smb.NtlmPasswordAuthentication.getSigningKey(NtlmPasswordAuthentication.java:476)

jcifs.smb.SmbSession.sessionSetup(SmbSession.java:299)

jcifs.smb.SmbSession.send(SmbSession.java:235)

jcifs.smb.SmbTree.treeConnect(SmbTree.java:161)

jcifs.smb.SmbSession.logon(SmbSession.java:171)

jcifs.smb.SmbSession.logon(SmbSession.java:164)

jcifs.http.NtlmHttpFilter.negotiate(NtlmHttpFilter.java:189)

jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:121)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

Alguém sabe como resolver isso?

Desde já agradeço!

T

http://lists.samba.org/archive/jcifs/2008-October/008227.html

X

Obrigado thingol!

Meu inglês não está muito afiado, mas se compreendi bem o JCIF não trabalha bem com NTLMv2. Que por acaso é utilizado aqui na empresa.
Se é isso mesmo, você tem alguma outra solução para capturar o login do usuário windows?
To precisando muito disso, achei que estava resolvido, mas agora…

E o pior, um programa aqui feito com .NET já faz isso, logo, eu preciso conseguir fazer o mesmo com nosso java… rs.

Xande_cf.

X

Será que alguém tem uma solução para esse problema? Qualquer ajuda será muito bem vinda!
Obrigado!

T

Você poderia usar o Apache Http Server (httpd) para ficar “na frente” do seu Tomcat, e então usar o módulo mod_auth_sspi (atenção: o Apache tem de ficar em uma máquina Windows para o mod_auth_sspi funcionar).
O SSPI usa as chamadas nativas ao Windows que fazem essa autenticação NTLMv2.

Então você teria algo semelhante à combinação .NET + IIS , que conforme você viu funciona muito bem para obter o usuário logado na rede.

X

thingol obrigado mais uma vez por responder!

Você poderia me passar mais detalhes sobre o Apache http server e o módulo mod_auth_sspi (como instalar e configurar) ?
Desculpe, mas nunca ouvi falar sobre isso (na verdade, fazem 4 meses que estou trabalhando com desenvolvimento), então não tenho idéia de como utilizá-lo. Se você puder me dar essa força, ficarei imensamente grato!
Já estou utilizando o tomcat em um pc com windows.

G

Pessoal tudo bem?

Minha duvida é o seguinte , eu tenho uma aplicação java desktop,utilizando JPA.

No cliente: eu fiz um ‘atalho’ q aponta para o arquivo .jar no servidor para rodar no cliente.

No servidor: eu instalei o postgresql 8.3 e fiz um restore com todas as informações que as tabelas precisam no banco de dados, as libs que o netbeans gera,
e a jre necessaria pra rodar a aplicação, no servidor a aplicação roda ‘normalmente’ , mas no cliente ele exibe o menu, mas nao mostra
os formularios com os dados em JTABLE.

podem me ajudar?

Valeu

Criado 4 de maio de 2009
Ultima resposta 6 de jul. de 2010
Respostas 13
Participantes 3