Pegar o usuario logado na rede utilizando NTLM com request.getRemoteUser(); utilizando JSF
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 ?
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
Curtidas 0
Respostas
Dyego Carmo
28/09/2009
Bom dia !
Dentro de qualquer Bean JSF voce acessa assim:
FacesContext.getExternalContext().getRequest().getRemoteUser();
Teste e me avise !
Dentro de qualquer Bean JSF voce acessa assim:
FacesContext.getExternalContext().getRequest().getRemoteUser();
Teste e me avise !
GOSTEI 0
Euclides Filizola
28/09/2009
Bom dia, eu irei testar daqui a pouco. Logo irei te dar um retorno.
Abraços.
GOSTEI 0
Dyego Carmo
28/09/2009
Certo ?
GOSTEI 0
Euclides Filizola
28/09/2009
Então deixa eu ver se eu entendi.
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");*/
@SuppressWarnings("unused")
private String getUniqueToken(final FacesContext facesContext) {
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
return request.getSession().getId();
}
public UsuarioMB() {
}
public void setUsuario(Usuario usuario){
this.usuario = usuario;
}
public Usuario getUsuario(){
return usuario;
}
}
É isso ?
GOSTEI 0
Dyego Carmo
28/09/2009
Se isto for um ManagedBean eh para funcionar...
GOSTEI 0
Euclides Filizola
28/09/2009
É um ManagedBean, porém não estou conseguindo testar.
Aqui vai meu bean completo.
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");*/
@SuppressWarnings("unused")
private String getUniqueToken(final FacesContext facesContext) {
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
return request.getSession().getId();
}
public UsuarioMB() {
}
public void setUsuario(Usuario usuario){
this.usuario = usuario;
}
public Usuario getUsuario(){
return usuario;
}
public UsuarioDAO getDao() {
return dao;
}
...
Mas não estou conseguindo fazer funcionar.
GOSTEI 0
Dyego Carmo
28/09/2009
Qual erro que dá ?
GOSTEI 0
Euclides Filizola
28/09/2009
com.sun.faces.mgbean.ManagedBeanCreationException: Não foi possível criar o managed bean usuarioMB. Os seguintes problemas foram encontrados:
- A propriedade uniqueToken para o managed bean usuarioMB não existe.
GOSTEI 0
Dyego Carmo
28/09/2009
request.getRemoteUser() retorna o q ?
GOSTEI 0
Dyego Carmo
28/09/2009
aonde que esta especificado este "uniqueToken" no seu projeto ?
Crie ele se for o caso... e coloque um getter e um setter !
Crie ele se for o caso... e coloque um getter e um setter !
GOSTEI 0
Euclides Filizola
28/09/2009
Eu estou tentando chamar assim.
E da o seguinte erro: SEVERE: Servlet.service() for servlet Faces Servlet threw exception com.sun.faces.mgbean.ManagedBeanCreationException: Não foi possível criar o managed bean usuarioMB. Os seguintes problemas foram encontrados: - A propriedade uniqueToken para o managed bean usuarioMB não existe. Porém, aqui está meu faces.config usuarioMB br.gov.ce.srh.siscontv.MB.UsuarioMB session uniqueToken java.lang.String ... E agora ?
E da o seguinte erro: SEVERE: Servlet.service() for servlet Faces Servlet threw exception com.sun.faces.mgbean.ManagedBeanCreationException: Não foi possível criar o managed bean usuarioMB. Os seguintes problemas foram encontrados: - A propriedade uniqueToken para o managed bean usuarioMB não existe. Porém, aqui está meu faces.config usuarioMB br.gov.ce.srh.siscontv.MB.UsuarioMB session uniqueToken java.lang.String ... E agora ?
GOSTEI 0
Dyego Carmo
28/09/2009
Criou GET E SET para esse uniqueToken ?
GOSTEI 0
Euclides Filizola
28/09/2009
Ele é um método com parametro.
private String UniqueToken( FacesContext facesContext) {
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
return request.getRemoteUser();
}
Tem algum problema ?
private String UniqueToken( FacesContext facesContext) {
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
return request.getRemoteUser();
}
Tem algum problema ?
GOSTEI 0
Dyego Carmo
28/09/2009
faca assim:
private String uniqueToken;
public void setUniqueToken(String token) {
uniqueToken = token;
}
public String getUniqueToken() {
return uniqueToken;
}
e teste.;
GOSTEI 0
Euclides Filizola
28/09/2009
Não retorna nada.
<h:outputText value="#{usuarioMB.uniqueToken}" />
É assim que eu estou tentando chamar.
<h:outputText value="#{usuarioMB.uniqueToken}" />
É assim que eu estou tentando chamar.
GOSTEI 0
Dyego Carmo
28/09/2009
no getUniqueToken coloque dentro:
return FacesContext.getExternalContext().getRequest().getRemoteUser();
e teste.
GOSTEI 0
Euclides Filizola
28/09/2009
public String getUniqueToken() {
return FacesContext.getExternalContext().getRequest().getRemoteUser();
}
Ta fazendo fazer isso ?
Não da certo. Da erro ! Ele sublinha " FacesContext.getExternalContext() ".
return FacesContext.getExternalContext().getRequest().getRemoteUser();
}
Ta fazendo fazer isso ?
Não da certo. Da erro ! Ele sublinha " FacesContext.getExternalContext() ".
GOSTEI 0
Dyego Carmo
28/09/2009
Ele diz o que ?
GOSTEI 0
Euclides Filizola
28/09/2009
Multiple markers at this line
- The method getRemoteUser() is undefined for the type Object
- Cannot make a static reference to the non-static method getExternalContext() from the type
FacesContext
.....
- The method getRemoteUser() is undefined for the type Object
- Cannot make a static reference to the non-static method getExternalContext() from the type
FacesContext
.....
GOSTEI 0
Dyego Carmo
28/09/2009
Tente:
return javax.faces.context.FacesContext.FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
return javax.faces.context.FacesContext.FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
GOSTEI 0
Euclides Filizola
28/09/2009
Ae Dyego funcionou cara ! .. uu ! Valeu,
assim funcionou:
public String getUniqueToken() {
return javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
Só queria que tu me ajudasse a otimizar esse método ae, ta mo feião! Pode ser ?
Abraços,
valeu
assim funcionou:
public String getUniqueToken() {
return javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
Só queria que tu me ajudasse a otimizar esse método ae, ta mo feião! Pode ser ?
Abraços,
valeu
GOSTEI 0
Dyego Carmo
28/09/2009
hehehe , otimizar ? nao tem o que otimizar , eh uma chamada soh hehehe...
Mas para esta outra duvida, voce deve abrir outro chamado
posso finalizar este ?
Mas para esta outra duvida, voce deve abrir outro chamado
posso finalizar este ?
GOSTEI 0
Euclides Filizola
28/09/2009
Pode sim chará !. Valeu !
Abraços.
Abraços.
GOSTEI 0