Pegar username com aplicação web (JSF) [RESOLVIDO]

segue:


    public static void main(String args[]) {
        Properties props = System.getProperties();
        props.list(System.out);
    }

Aix, ai vc está fazendo uma aplicação desktop, ai sempre vai pegar as informações da maquina que está executando o jar, no caso dele é uma aplicação web, acessivel por um navegador, onde essas informações não vão estar disponiveis. Se ele fizer isso numa aplicação web, vai retornar a informações da maquina servidor.

verdade, to pensando se tem como injetar este comando pelo browser, via javaScript ( ainda não sei ) para executar na maquina cliente e me retonar o user.

Eu tinha visto sobre a chamada getRemoteUser().

(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser())

Mas sempre retornava null, mas parece que é configuração do Tomcat (no meu caso).
Vou continuar lendo aqui pra ver se acho como configura ele direito pra esse remoteUser retornar o username.

concordo com o jaziel.rc, ter acesso a esses dados em sistema web é complicado…

Antes de eu continuar minha pesquisa aqui, alguém que entenda mais poderia me dizer se esse getRemoteUser é ± o que eu quero?
Pelo que li, parece que é isso msm.
Ele é da classe ExternalContext.

http://docs.oracle.com/javaee/5/api/javax/faces/context/ExternalContext.html#getRemoteUser()

=]
Vlw

[quote=BrZumba]Antes de eu continuar minha pesquisa aqui, alguém que entenda mais poderia me dizer se esse getRemoteUser é ± o que eu quero?
Pelo que li, parece que é isso msm.
Ele é da classe ExternalContext.

http://docs.oracle.com/javaee/5/api/javax/faces/context/ExternalContext.html#getRemoteUser()

=]
Vlw[/quote]

esta retornando nulo para você ? disculpa a insistencia mas agora fiquei curioso em saber :slight_smile: pois diz : Retorna o nome de login do usuário que fez a requisição atual se houver, caso contrário, retornará nulo.

[quote=aix][quote=BrZumba]Antes de eu continuar minha pesquisa aqui, alguém que entenda mais poderia me dizer se esse getRemoteUser é ± o que eu quero?
Pelo que li, parece que é isso msm.
Ele é da classe ExternalContext.

http://docs.oracle.com/javaee/5/api/javax/faces/context/ExternalContext.html#getRemoteUser()

=]
Vlw[/quote]

esta retornando nulo para você ? disculpa a insistencia mas agora fiquei curioso em saber :slight_smile: pois diz : Retorna o nome de login do usuário que fez a requisição atual se houver, caso contrário, retornará nulo.[/quote]

Sim. Eu uso essa chamada e retorna nulo.

String teste = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
e ‘teste’ é null.

Pelo que eu vi, parece que é configuração do servidor (no meu caso tomcat).
Estou fuçando a internet aqui pra ver de qualé…

No Windows tem a variável de ambiente %USERNAME%. Dei uma procurada rápida pela internet e parece que em máquinas windows você pode utilizar ActiveX ou VBScript (nao encontrei nada para javascript) para pegar as variáveis de ambientes do cliente e enviar num request para o server, mas nunca usei isso. Outra sugestão seria fazer um applet ou flash para buscar essas variáveis de ambiente.

Obs: No request dei uma olhada rápida em PHP (servidor rápido para testes que tenho aqui, rsrs) e não tem nenhuma identificação do usuário, segue o código de exemplo:

<?php foreach(getallheaders() as $key => $value){ echo "Key = $key => Value = $value
"; } ?>

E para o chrome trouxe esses resultados:

[quote]Key = Host => Value = localhost
Key = Connection => Value = keep-alive
Key = Cache-Control => Value = max-age=0
Key = Pragma => Value = no-cache
Key = User-Agent => Value = Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
Key = Accept => Value = text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Key = Accept-Encoding => Value = gzip,deflate,sdch
Key = Accept-Language => Value = pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Key = Accept-Charset => Value = ISO-8859-1,utf-8;q=0.7,*;q=0.3
Key = Cookie => Value = SESS29af1facda0a866a687d5055f2fade2c=OwPNYEjGlqbfv3EpIghBXjGGBd5D9zyBa0jPPZ7pr_Q [/quote]

Para o ff:

[quote]Key = Host => Value = localhost
Key = User-Agent => Value = Mozilla/5.0 (Windows NT 6.2; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
Key = Accept => Value = text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Key = Accept-Language => Value = en-us,en;q=0.5
Key = Accept-Encoding => Value = gzip, deflate
Key = Accept-Charset => Value = ISO-8859-1,utf-8;q=0.7,*;q=0.7
Key = Connection => Value = keep-alive [/quote]

Internet Explorer

[quote]Key = Accept => Value = text/html, application/xhtml+xml, /
Key = Accept-Language => Value = pt-BR
Key = User-Agent => Value = Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Key = Accept-Encoding => Value = gzip, deflate
Key = Host => Value = localhost
Key = Connection => Value = Keep-Alive [/quote]

Safari

[quote]Key = Host => Value = localhost
Key = User-Agent => Value = Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
Key = Accept => Value = text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Key = Accept-Language => Value = en-US
Key = Accept-Encoding => Value = gzip, deflate
Key = Connection => Value = keep-alive [/quote]

[quote=BrZumba][quote=aix][quote=BrZumba]Antes de eu continuar minha pesquisa aqui, alguém que entenda mais poderia me dizer se esse getRemoteUser é ± o que eu quero?
Pelo que li, parece que é isso msm.
Ele é da classe ExternalContext.

http://docs.oracle.com/javaee/5/api/javax/faces/context/ExternalContext.html#getRemoteUser()

=]
Vlw[/quote]

esta retornando nulo para você ? disculpa a insistencia mas agora fiquei curioso em saber :slight_smile: pois diz : Retorna o nome de login do usuário que fez a requisição atual se houver, caso contrário, retornará nulo.[/quote]

Sim. Eu uso essa chamada e retorna nulo.

String teste = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
e ‘teste’ é null.

Pelo que eu vi, parece que é configuração do servidor (no meu caso tomcat).
Estou fuçando a internet aqui pra ver de qualé…[/quote]

não vai funcionar com FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); isot é caso o usuario ja esteja logado na app.

como diz: Retorna o nome de login do usuário que fez a requisição atual se houver retorna null porque não tem ninguem logado.

encontrei esse código ActiveX:

var wshShell = new ActiveXObject("WScript.Shell"); var usuario = wshShell.ExpandEnvironmentStrings("%USERNAME%"); alert(usuario);

aqui

Mas, conforme um comentário no próprio forum do imasters:

e

[quote]Você esta trabalhando em ambiente intranet? Se sim, outra forma seria você configurar o endereço como site confiável.
[/quote]

Mas acho que ActiveX só funciona no IE.

Opa, vlw.

Vou dar uma olhada depois.

Eu achei essa página: http://hardforum.com/showthread.php?t=1099819 onde o cara fala que o existe um “mod_auth_sspi” pro apache que faz exatamente o que quero.

Só preciso aprender direito a instalar esses módulos no apache e mexer nas configurações dele.
Manterei esse tópico informado hehehehehehee
Qlqer coisa que descobrirem aí, avisem!
=]

[quote=BrZumba]Opa, vlw.
Vou dar uma olhada depois.
Eu achei essa página: http://hardforum.com/showthread.php?t=1099819 onde o cara fala que o existe um “mod_auth_sspi” pro apache que faz exatamente o que quero.
Só preciso aprender direito a instalar esses módulos no apache e mexer nas configurações dele.
Manterei esse tópico informado hehehehehehee
Qlqer coisa que descobrirem aí, avisem!
=][/quote]

o propósito disto tudo é apenas usar o user do sistema como login para a aplicação ? acho que tem como fazer isto com JASS + SSO se for pensar o google faz isto, quando logamos em sistema da web com as credencias do gmail por exemplo.

Então galera, dando notícias…

Descobri que tem como fazer. Mas tem que botar o servidor Apache junto. Só o tomcat não consegue.
O problema foi botar o tomcat rodando junto com o apache… me tomou alguns dias hehehehehehe
Mas consegui (utilizando o mod_jk do apache).

Então atualmente eu tenho um servidor web Apache que manda as requisições pro tomcat. Até aí, blz.

Aí agora que eu tenho o apache, eu tenho que instalar o módulo mod_auth_sspi. E é aí que tá a caquinha. Não to conseguindo nem a pau. Vou abrir um outro tópico aqui com um título mais específico pra ver se alguém ajuda.

Qnd eu conseguir boto aqui tudo que foi preciso o/

[quote=BrZumba]Então galera, dando notícias…

Descobri que tem como fazer. Mas tem que botar o servidor Apache junto. Só o tomcat não consegue.
O problema foi botar o tomcat rodando junto com o apache… me tomou alguns dias hehehehehehe
Mas consegui (utilizando o mod_jk do apache).

Então atualmente eu tenho um servidor web Apache que manda as requisições pro tomcat. Até aí, blz.

Aí agora que eu tenho o apache, eu tenho que instalar o módulo mod_auth_sspi. E é aí que tá a caquinha. Não to conseguindo nem a pau. Vou abrir um outro tópico aqui com um título mais específico pra ver se alguém ajuda.

Qnd eu conseguir boto aqui tudo que foi preciso o/[/quote]

Criei o outro tópico na sessão de desenvolvimento web.
http://www.guj.com.br/java/262296-pegar-nome-do-usuario-com-apache--tomcat#1370633
o/

CONSEGUIIIIIIIII

AAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

\o/

Então, a resposta é isso mesmo que eu tava fazendo. Pelo que eu entendi, o Apache tem uma variável chamada “REMOTE_USER”.
O que o externalContext.getRemoteUser() faz é recuperar essa variável.

Aparentemente, o que faz o Apache setar essa variável é usar o “módulo” mod_auth_sspi.

Depois que eu “instalei” esse módulo, continuou dando erro pq tem que colocar a tag tomcatAuthentication=“false” no server.xml do tomcat. Se eu não fizer isso, o Apache faz uma autenticação e blz. Mas aí quando ele passa a requisição pro tomcat, o tomcat tenta fazer outra… aí que ele retorna null.

Então, no meu server.xml, ficou desse jeito

Daí agora, eu dou um
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
e me retorna DOMINIO\USERNAME

Pronto.

Depois de duas semanas apanhando, posso continuar.
hehehehehehehe

Valeu!

[quote=BrZumba]CONSEGUIIIIIIIII

AAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

\o/

Então, a resposta é isso mesmo que eu tava fazendo. Pelo que eu entendi, o Apache tem uma variável chamada “REMOTE_USER”.
O que o externalContext.getRemoteUser() faz é recuperar essa variável.

Aparentemente, o que faz o Apache setar essa variável é usar o “módulo” mod_auth_sspi.

Depois que eu “instalei” esse módulo, continuou dando erro pq tem que colocar a tag tomcatAuthentication=“false” no server.xml do tomcat. Se eu não fizer isso, o Apache faz uma autenticação e blz. Mas aí quando ele passa a requisição pro tomcat, o tomcat tenta fazer outra… aí que ele retorna null.

Então, no meu server.xml, ficou desse jeito

Daí agora, eu dou um
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
e me retorna DOMINIO\USERNAME

Pronto.

Depois de duas semanas apanhando, posso continuar.
hehehehehehehe

Valeu!
[/quote]

Parabéns!!!