Logout não desliga usuário logado
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.
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
Curtidas 0
Respostas
Régis Santos
02/06/2012
Outras informações importantes:
- Uso o MOJARRA;
- JSF 2.0
- JSP
- SPRING SECURITY 3
- Java 1.6
- Uso o MOJARRA;
- JSF 2.0
- JSP
- SPRING SECURITY 3
- Java 1.6
GOSTEI 0
Robson Teixeira
02/06/2012
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
att
robson
GOSTEI 0
Davi Costa
02/06/2012
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
att Davi
GOSTEI 0
Régis Santos
02/06/2012
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.
GOSTEI 0
Davi Costa
02/06/2012
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
<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
GOSTEI 0
Régis Santos
02/06/2012
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
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
GOSTEI 0
Davi Costa
02/06/2012
Esse ultimo trecho ai está sem problemas tb, posta essa classe:
CustomUserDetailsService
att Davi
CustomUserDetailsService
att Davi
GOSTEI 0
Régis Santos
02/06/2012
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;
}
});
}
}
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;
}
});
}
}
GOSTEI 0
Régis Santos
02/06/2012
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);
}
}
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);
}
}
GOSTEI 0
Robson Teixeira
02/06/2012
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
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
GOSTEI 0
Régis Santos
02/06/2012
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.
Eu já resolvi esta questão.
Eu havia cometido um erro na criação do meu código ao logar no sistema.
Régis.
GOSTEI 0
Davi Costa
02/06/2012
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
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
GOSTEI 0