Fórum Logout não desliga usuário logado #417936
02/06/2012
0
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
Curtir tópico
+ 0Posts
02/06/2012
Régis Santos
- Uso o MOJARRA;
- JSF 2.0
- JSP
- SPRING SECURITY 3
- Java 1.6
Gostei + 0
02/06/2012
Robson Teixeira
att
robson
Gostei + 0
04/06/2012
Davi Costa
att Davi
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.
Gostei + 0
04/06/2012
Davi Costa
<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
05/06/2012
Régis Santos
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
05/06/2012
Davi Costa
CustomUserDetailsService
att Davi
Gostei + 0
05/06/2012
Régis Santos
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
05/06/2012
Régis Santos
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
11/06/2012
Robson Teixeira
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
11/06/2012
Régis Santos
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
11/06/2012
Davi Costa
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
Clique aqui para fazer login e interagir na Comunidade :)