Usuário logado no Windows usando System.getProperty("user.name") + TomCat  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Pessoal,

Estou utilizando a seguinte propriedade para pegar o usuário logado no Windows:

public String usuario_sessao = System.getProperty("user.name");

Quando estou rodando a aplicação no eclipse ele retorna o login corretamente. Quando populo o .war no Tomcat ele retorna uma string chamada: SYSTEM.


Algém sabe como fazer isso funcionar direito?

This message was edited 2 times. Last update was at 24/05/2011 08:31:39

victorrseloy
HelloWorld

Membro desde: 03/02/2010 01:33:54
Mensagens: 14
Offline

Olá,

O que está acontecendo é o seguinte. Quando você roda a aplicação no eclipse, o usuário ao qual a VM fica associada é o seu usuário. Mas quando ela é rodada pelo tomcat, o usuário que inicia o tomcat e a VM(do ponto de vista do Windows) é um usuário interno do windows chamdo SYSTEM( se você abrir o gerenciador de tarefas, você verá que vários processos são rodados por esse usuário), quando você faz uma requisição de um computador qualquer para o seu servidor a VM( que está rodando no servidor), consulta o SO do servidor descobre quem é o usuário que instanciou ela, e devolve para você. Ou seja sempre que você tentar fazer System.getProperty("user.name") em um container j2ee rodando no windows, você vai obter a resposta "SYSTEM"

SCJP 6.0

-----------------------------------------

Victor Ribeiro da Silva Eloy
rodrigo.ferreira
JavaGuru
[Avatar]

Membro desde: 28/08/2008 20:38:07
Mensagens: 200
Offline

rfogo, boa noite!

Tente isto:



Abraço,

This message was edited 1 time. Last update was at 20/05/2011 18:47:15


Rodrigo Lopes Ferreira
Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5
Sun Certified Business Component Developer for the Java Platform, Enterprise Edition 5
Sun Certified Web Component Developer for the Java Platform, Enterprise Edition 5
Sun Certified Programmer for the Java 2 Platform, Standard Edition 5
Tecnólogo em Informática com Ênfase em Gestão de Negócios - FATEC - Mococa - SP
Pós Graduando em Desenvolvimento de Sistemas em Software Livre - Universidade Católica de Brasília
[MSN]
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

rodrior e victor,

Obrigado pelas repostas, porém o infoSystem.getName() está retornando o mesmo usuário "SYSTEM".
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Pessoal,

Sigo na busca por solução. Voltei meus esforços para o jcifs, parece que o mesmo funciona bem porém na nossa rede não tem compatibilidade pois o domínio solicita "security policy requires NTLMv2" que não é compatível mesmo com as versões mais recentes do jcifs.

Se alguém tiver alguma solução, estamos aí.....
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Pessoal,

Nada ainda, é impossível que não tenha uma solução para isso!
leo.andven
JavaChild
[Avatar]
Membro desde: 19/05/2011 10:33:50
Mensagens: 128
Offline

O que você, "de verdade"? Verificar o usuário que está acessando sua página, ou o usuário que está executando o processo do TOMCAT?

Você já leu seu Effective Java hoje?
--
Sim, eu posso voar!!
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Tenho que identificar o usuario que acessou a pagina para que assim o mesmo possa logar na aplicacao! Quando uso o infoSystem.getName() ou System.getProperty("user.name"); rodando via o eclipse funciona porem quando faco o deploy no tomcat a aplicacao nao loga pois retorna o usuario "SYSTEM" .
joaosouza
JavaEvangelist
[Avatar]

Membro desde: 14/08/2006 15:57:59
Mensagens: 331
Localização: São Paulo
Offline

Acredito que você possa adicionar uma página de Login, com campos de Login/Senha para preenchimento por parte do usuário da aplicação. Após isso vcoê armazena essas informações na sessão do usuário... Pois como o victorrseloy falou, a VM associada ao Container sempre terá o user SYSTEM no caso do Windows.

João Paraiso.

# The Future is Open !!
[Email] [Yahoo!] [MSN]
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

João,

A minha intenção é que a aplicação não tenha essa tela de login. Porém se eu não encontrar solução para esse problema não vou ter como fugir disso!

leo.andven
JavaChild
[Avatar]
Membro desde: 19/05/2011 10:33:50
Mensagens: 128
Offline

Como o joaosouza respondeu, você vai precisar de uma página de login ou outro mecanismo para o usuário se identificar.

O System.getProperty("user.name") identifica o usuário do sistema que executa a máquina virtual. E não quem acessou a página.

Se você quer fazer integração entre o browser e o usuário logado do windows, sugiro tentar a biblioteca SPNEGO. Isso faz a integração entre o browser e o Windows.

The intent of this project is to provide an alternative library (.jar file) that application servers (like Tomcat) can use as the means for authenticating clients (like web browsers).

....

However, if your organization uses java based web/application servers, and you prefer Kerberos/SPNEGO instead of NTLM as the authentication protocol, and you would rather have a Java Servlet Filter (JSR-53) based implementation instead of a container specific authentication module (JSR-196), and you want SSO
(no username/password prompt), then this project may be of some interest to you.

Você já leu seu Effective Java hoje?
--
Sim, eu posso voar!!
joaosouza
JavaEvangelist
[Avatar]

Membro desde: 14/08/2006 15:57:59
Mensagens: 331
Localização: São Paulo
Offline

Olá rfogo, blz ?

Entendi sua necessidade, porém do jeito que vocês está tentando implementar acredito que não dê certo...Uma alteranatica é tentar implementar uma solução como o leo.andven passou. Outra alternativa é tentar fazer esse tipo de integração integrada com o AD (Active Directory), pois ai você terá como recuperar pela sua aplicação o user logado no Domínio através do AD.

João Paraiso.

# The Future is Open !!
[Email] [Yahoo!] [MSN]
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Na hora que o usuário acessa a aplicação ele dispara um método que verifica o usuário logado no windows. Com isso ele pega o usuário e verifica se existe esse usuário no banco. Se existir ele loga na aplicação se não gera uma mensagem de erro.

Esse SPNEGO faz isso?
leo.andven
JavaChild
[Avatar]
Membro desde: 19/05/2011 10:33:50
Mensagens: 128
Offline

SPNEGO faz mais que isso, ele (parece que) tenta autenticar contra um Kerberos também.

Eu nunca usei, mas o código dele mostra que ele cria um novo ServletRequest (SpnegoHttpServletRequest) que tem um método getRemoteUser() que retorna o usuário logado.

Eu diria que o que você quer está nesse pacote, tem só de configurar/adaptar para o que você quer...


Você já leu seu Effective Java hoje?
--
Sim, eu posso voar!!
rfogo
JavaTeenager

Membro desde: 18/05/2010 22:04:36
Mensagens: 162
Offline

Será que não tem uma outra forma mais simples de fazer isso? Pesquisei um pouco sobre o SPNEGO e para eu chegar a usar o getRemoteUser() vai se uma longa caminhada até porque os exemplos que estudei trata a Autenticação com Kerberos.
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team