Fórum Logout não desliga usuário logado #417936

02/06/2012

0

Estou aplicando o LOGOUT através deste comando:
javascript: window.location=j_spring_security_logout

Ele funciona em parte. Obs.:As informações do usuário logado não são apagadas.

Como faço para que o LOGOUT apague as informações do usuário logado?
Permitindo que um outro usuário novo entre no sistema, sem nenhum vestígio do usuário logado anteriormente?

Régis.

Régis Santos

Régis Santos

Responder

Posts

02/06/2012

Régis Santos

Outras informações importantes:
- Uso o MOJARRA;
- JSF 2.0
- JSP
- SPRING SECURITY 3
- Java 1.6
Responder

Gostei + 0

02/06/2012

Robson Teixeira

Obtenha o objeto Session do tipo HttpSession e chame o método invalidate que vai limpar todos os dados da seção e criar uma nova.

att
robson
Responder

Gostei + 0

04/06/2012

Davi Costa

Posta suas configurações do spring-security e se possível o página que contém o form que vc se desloga, desconfio que seja alguma bronca por ai.

att Davi
Responder

Gostei + 0

04/06/2012

Régis Santos


topoBarraFerramentas.xhtml:

<ui:composition>
<h:panelGrid columns=3 width=100% id=toolBar styleClass=menuNormalVerdePequeno>
<h:panelGrid columns=3>
<h:graphicImage url=# width=50 height=50 alt=globo/>
<h:outputText value=Régis styleClass=genericoLabelAmarelo ></h:outputText>
<h:outputText value=E-Commerce styleClass=genericoLabelBranco ></h:outputText>
</h:panelGrid>
<h:panelGrid columns=15 width=100% styleClass=menuNormalVerdePequeno>
<h:outputText value=12345 styleClass=menuNormalVerdePequeno ></h:outputText>
<h:outputText value=#{msg.menu_selecaoProdutos} styleClass=# ></h:outputText>
<h:outputText value=123 styleClass=menuNormalVerdePequeno ></h:outputText>
<h:outputText value=#{msg.menu_carrinhoCompras} styleClass=# ></h:outputText>
<h:outputText value=123 styleClass=menuNormalVerdePequeno ></h:outputText>
<h:outputText value=#{msg.menu_entrega} styleClass=# ></h:outputText>
<h:outputText value=123 styleClass=menuNormalVerdePequeno ></h:outputText>
<h:outputText value=#{msg.menu_pagamento} styleClass=# ></h:outputText>
<h:outputText value=123 styleClass=menuNormalVerdePequeno ></h:outputText>
<h:outputText value=#{msg.menu_aprovacao} styleClass=# ></h:outputText>
<h:outputText value=123 styleClass=menuNormalVerdePequeno></h:outputText>
<h:commandLink id=cmdConta action=#{barraFerramentasBean.chamarCliente} value=>
<f:setPropertyActionListener value=false
target=#{opcoesSelecionarBean.isIdentificar}/>
<f:setPropertyActionListener value=#
target=#{opcoesSelecionarBean.menuAnterior}/>
<f:setPropertyActionListener value=#
target=#{opcoesSelecionarBean.nomeMenuAnterior}/>
<h:graphicImage url=#{localeBean.imagemConta} styleClass=genericoImagemMiniaturaLog/>
</h:commandLink>
<h:panelGrid width=100% columns=1
rendered=#{barraFerramentasBean.isLogado} >
<h:panelGrid styleClass=alinhamentoCentralizado columns=1>
<h:outputText value=#{barraFerramentasBean.nomeClienteLogado} styleClass=menuNormalPequenoAmarelo/>
<h:outputText value=#{msg.cliente_conta1} styleClass=menuNormalBrancoPequeno/>
<h:outputText value=#{msg.cliente_conta2} styleClass=menuNormalBrancoPequeno/>
</h:panelGrid>
</h:panelGrid>
<h:panelGrid width=100% columns=1 rendered=#{barraFerramentasBean.isLogado == false}>
<h:commandLink id=idLogin action=#{barraFerramentasBean.chamarLoginIda}
styleClass=genericoLabelAzulTamMedio>
<f:setPropertyActionListener value=#
target=#{localeBean.loginRetorno}/>
<f:setPropertyActionListener value=true
target=#{clienteBean.isNovaChamada}/>
<f:setPropertyActionListener value=true
target=#{clienteBean.isNovaChamadaEntrega}/>
<f:setPropertyActionListener value=true
target=#{vendaCompraBean.isNovaChamada}/>
<h:graphicImage url=#{localeBean.imagemSignin} styleClass=genericoImagemMiniaturaLog/>
</h:commandLink>
</h:panelGrid>
<h:panelGrid width=100% columns=1 rendered=#{barraFerramentasBean.isLogado}>
<h:commandLink id=idLogout action=#{barraFerramentasBean.chamarLogoutAux}>
<f:setPropertyActionListener value=#
target=#{localeBean.caminhoLogout}/>
<h:graphicImage url=#{localeBean.imagemSignout} styleClass=genericoImagemMiniaturaLog/>
</h:commandLink>
</h:panelGrid>

</h:panelGrid>
</h:panelGrid>
</ui:composition>



formulário vendas_selecionarProduto chamando o componente topoBarraFerramentas:

<h:form id=meuFormVendaSelecionarProduto>
<h:inputHidden id=idIniciar value=#{vendaSelecionarProdutoBean.iniciar}/>
<h:panelGrid width=100% columns=1>
<com:compBarraFerramentas id=idBarraFerramentas
styleSelecaoProduto=menuNegritoSelecionado
styleCarrinhoCompras=menuNormalBrancoMedio
styleEntrega=menuNormalBrancoMedio
stylePagamento=menuNormalBrancoMedio
styleAprovacao=menuNormalBrancoMedio
imagemGlobo=/imagens/globo1.jpg
imagemConta=/imagens/conta.jpg
imagemLogin =/imagens/login.jpg
imagemLogout = /imagens/logout.jpg
paramMenuAnterior=chamarSelecionarProduto
paramNomeMenuAnterior=#{msg.menu_selecaoProdutos}
paramLoginRetorno = venda_selecionarProduto.jsf
paramCaminhoLogout=javascript: window.location=j_spring_security_logout/>



formulário LogoutAux:

</head>
<body onload=#{localeBean.caminhoLogout}> <!-- chama aqui o comando de logout: -->
<f:view> <!-- javascript: window.location=j_spring_security_logout -->
<h:form> <!-- configurado por vendas_selecionarProduto e passando por -->
</h:form> <!-- topoBarraFerramentas -->
</f:view>
</body>





spring-config-security:

<?xml version=1.0 encoding=UTF-8?>
<beans:beans xmlns=http://www.springframework.org/schema/security
xmlns:beans=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd>

<http auto-config=true access-denied-page=/acessoNegado.jsp>
<logout invalidate-session=true logout-success-url=/locale.jsf/>
<intercept-url pattern=/usuarios/** access=ROLE_USUARIO, ROLE_ADMIN/>
<intercept-url pattern=/admin/** access=ROLE_ADMIN/>
<form-login login-page=/login.jsp authentication-failure-url=/login.jsp?login_error=true
default-target-url=/loginRetorno.jsf/>
</http>

<authentication-manager>
<authentication-provider user-service-ref=customUserService>
<password-encoder hash=md5/>
</authentication-provider>
</authentication-manager>

<beans:bean id=customUserService class=seguranca.CustomUserDetailsService>
<beans:property name=dataSource ref=dataSource/>
<beans:property name=usersByUsernameQuery value=SELECT usu.nome_usu as username,
usu.senha_usu as password, usu.ativo_usu as enabled FROM usuarios as usu WHERE nome_usu = ? />
<beans:property name=authoritiesByUsernameQuery value=SELECT usu.nome_usu as username,
per.descricao_per as authority FROM usuarios as usu JOIN usuarios_perfis as usuper
on usu.id_usu = usuper.id_usu JOIN perfis as per on usuper.id_per = per.id_per WHERE usu.nome_usu = ?
></beans:property>
</beans:bean>

<!-- Load in application properties reference -->
<beans:bean id=applicationProperties class=org.springframework.beans.factory.config.PropertyPlaceholderConfigurer>
<beans:property name=location value=application.properties/>
</beans:bean>

<beans:bean id=dataSourceSeg class=org.springframework.jdbc.datasource.DriverManagerDataSource>
<beans:property name=driverClassName><beans:value>${jdbc.driver.className}</beans:value></beans:property>
<beans:property name=url><beans:value>${jdbc.url}</beans:value></beans:property>
<beans:property name=username><beans:value>${jdbc.username}</beans:value></beans:property>
<beans:property name=password><beans:value>${jdbc.password}</beans:value></beans:property>
</beans:bean>

<beans:bean class=seguranca.EventListenerSenhaIncorreta>
<beans:property name=dataSource ref=dataSourceSeg/>
</beans:bean>

<beans:bean class=org.springframework.security.authentication.event.LoggerListener/>

</beans:beans>

Obrigado. Régis.
Responder

Gostei + 0

04/06/2012

Davi Costa

tenta fazer essa chamada para se deslogar:
<a href=#{request.contextPath}/j_spring_security_logout title=Sair>Sair</a>

Apesar de quê pareceu estar tudo correto.
Esse seu arquivo está ok né: application.properties?


att Davi
Responder

Gostei + 0

05/06/2012

Régis Santos

Eu usei o que você me disse mas continua permanecendo o mesmo usuário logado, sem apagá-lo.

Veja outra classe e parte de código que eu uso.


public class UsuarioUtil {

public final static String VAZIO = ;
public final static Integer ZERO = 0;

public UsuarioUtil(){

}

public static String getNomeUsuarioLogado(){
String nomeUsuario = VAZIO;
if (getUsuarioLogado() != null){
Usuario usuario = getUsuarioLogado();
nomeUsuario = usuario.getUsername();
}
return nomeUsuario;
}

private static Usuario getUsuarioLogado(){
Authentication authentication =
(Authentication)SecurityContextHolder.
getContext().getAuthentication();
Usuario usuario = new Usuario();
if(authentication == null){
usuario = null;
} else{
usuario.setLogin(authentication.getName());
usuario.setAuthorities((authentication.getAuthorities()));
}
return usuario;
}
}



application.properties:

jdbc.driver.className=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/BdVendas
jdbc.username=postgres
jdbc.password=postgres
jdbc.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

Responder

Gostei + 0

05/06/2012

Davi Costa

Esse ultimo trecho ai está sem problemas tb, posta essa classe:
CustomUserDetailsService

att Davi
Responder

Gostei + 0

05/06/2012

Régis Santos

package seguranca;

import java.sql.ResultSet;
import java.sql.SQLException;


import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;

public class CustomUserDetailsService extends JdbcDaoImpl {

public CustomUserDetailsService(){

}

protected UserDetails createUserDetails(String username,
UserDetails userFromUserQuery,
GrantedAuthority[] combinedAuthorites){
Usuario usuario = new Usuario();
usuario.setLogin(userFromUserQuery.getUsername());
usuario.setSenha(userFromUserQuery.getPassword());
usuario.setAtivo(userFromUserQuery.isEnabled());
usuario.setAuthorities(userFromUserQuery.getAuthorities());
carregarInformacoesAdicionais(usuario);
return usuario;
}

private void carregarInformacoesAdicionais(final Usuario usuario) {
this.getJdbcTemplate().queryForObject(
select email_usu, tentativaslogin_usu from usuarios where nome_usu = ? ,
new Object[]{usuario.getUsername()},
new RowMapper<Usuario>() {
public Usuario mapRow(ResultSet rs, int rowNum) throws SQLException {
usuario.setEmail(rs.getString(email_usu));
usuario.setTentativasLogin(rs.getInt(tentativaslogin_usu));
return usuario;
}
});
}
}
Responder

Gostei + 0

05/06/2012

Régis Santos

package seguranca;

import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;

public class SegurancaUsuario extends org.springframework.security.core.userdetails.User {

private static final long serialVersionUID = 7486877876023620745L;

private Usuario usuario;

public Usuario getUsuario() {
return usuario;
}

public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}

public SegurancaUsuario(String nomeUsuario, String senha, boolean ativo,
boolean accountNonExpired, boolean credentialsNonExpired,
boolean accountNonLocked, Collection<GrantedAuthority> authorities)
throws IllegalArgumentException {
super(nomeUsuario, senha, ativo, accountNonExpired,
credentialsNonExpired, accountNonLocked, authorities);
}

}
Responder

Gostei + 0

11/06/2012

Robson Teixeira

Kra sugiro que você implemente o seguinte trecho de codigo em um método de sua managedBean.

HttpSession session =((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession();
session.invalidate();

e que o link ou botão que você usa
para realizar o logoff chame também o comando js javascript: window.location=j_spring_security_logout.

pois assim o spring security vai executar as configurações para deslogar e também ao invalidar a session vai tirar todo
e qualquer tipo de dado que possa ter ficado na session.

espero ter ajudado.
att
robson
Responder

Gostei + 0

11/06/2012

Régis Santos

Obrigado a todos pela contribuição ao meu problema.

Eu já resolvi esta questão.

Eu havia cometido um erro na criação do meu código ao logar no sistema.


Régis.
Responder

Gostei + 0

11/06/2012

Davi Costa

Show de bola Regis!
O Spring-security deve fazer todo o tratamento com respeito a segurança e sessão, abstraindo para o desenvolvimento apenas suas regras de negócio a nível de segurança e autorização.


att Davi
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar