Pegar o usuario logado na rede utilizando NTLM com request.getRemoteUser(); utilizando JSF

28/09/2009

Boa tarde pessoal da DevMedia, eu andei pesquisando ae uma forma de capturar o usuario logado pela rede, e vi que posso pegar via NTLM. Ou melhor, a forma em que está estruturada a rede aqui vai ser essa forma, pois além de ter o AD num Win Server 2003, temos um servidor linux com o SMB. E então eu preciso pegar o usuario logado pelo SMB.

O que eu preciso é pegar o login do usuario que está logado na rede, para poder então dar um nível de acesso, ou seja, é como uma intranet, onde o usuario apenas abre o browser e já está logado, com nível de acesso e tudo.


Dae eu li várias coisas e até o momento só consegui isso:

colocar dentro do meu web.xml os seguintes codigos:

<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>

<init-param>
<param-name>jcifs.netbios.wins</param-name>
<param-value>172.31.128.21</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>my domain.com</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.username</param-name>
<param-value>userName</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.password</param-name>
<param-value>Password</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>NtlmHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

mas o problema é que:

Não sei onde eu irei utilizar o request.getRemoteUser(); pois estou utilizando JSF com JPA.

Alguém poderia me ajudar ?
Euclides Filizola

Euclides Filizola

Curtidas 0

Respostas

Henrique Weissmann

Henrique Weissmann

28/09/2009

Olá,

você pode acessar a sua instância de HttpServletRequest tal como no exemplo abaixo:

      
        FacesContext contextoFaces = FacesContext.getCurrentInstance();
        if (contextoFaces == null || contextoFaces.getExternalContext() == null || contextoFaces.getExternalContext().getRequest() == null)
            return null;
        return (HttpServletRequest) contextoFaces.getExternalContext().getRequest();

GOSTEI 0
Euclides Filizola

Euclides Filizola

28/09/2009

Ta, mas eu coloco isso dentro de uma classe, ou dentro de uma pagina de apresentação, como uma xhtml ? Ou seja, eu crio um Bean e utilizo ele dentro de um xhtml, ou eu coloco dentro do próprio xhtml. ?
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

28/09/2009

No caso, você deve utilizar esta classe dentro de um managed bean do JSF, pois assim será mais fácil reutilizar estas informações dentro da sua aplicação, além disto, se trata de uma informação que diz respeito à camada de controle dentro do padrão MVC.
GOSTEI 0
Euclides Filizola

Euclides Filizola

28/09/2009

Ta, deixa eu ver se eu entendi então. Eu tenho o bean Usuario abaixo: package br.gov.ce.srh.siscontv.MB; import br.gov.ce.srh.siscontv.model.DAO.*; import entity.Usuario; public class UsuarioMB implements java.io.Serializable { private static final long serialVersionUID = 1L; private final UsuarioDAO dao = new UsuarioDAO(); private Usuario usuario = new Usuario(); String login = System.getProperty("user.name"); public UsuarioMB() { } public void setUsuario(Usuario usuario){ this.usuario = usuario; } public Usuario getUsuario(){ return usuario; } } Dae, no lugar de colocar " System.getProperty("user.name"); eu utilizo. FacesContext.getExternalContext().getRequest().getRemoteUser(); ? Se eu quiser pegar o login do "RemoteUser", como eu farei?
GOSTEI 0
Devmedia

Devmedia

28/09/2009

chamado resolvido com o consultor Dyego
GOSTEI 0
POSTAR