como fechar uma sessão no jsf. Exemplo o usuário clicou em sair preciso destruir o usuário e acabar com este contexto …
JSF - login
8 Respostas
Existem vários jeitos para vc fazer isso. Um deles seria vc colocar um button “logout” como um action deste tipo:
public String logout() {
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().remove("beanDoUsuario");
context.getExternalContext().getSessionMap().remove("OutrosBeans");
return "success"
}
Espero ter conseguido te ajudar. 
ou vc pode invalidar a sessao, ja que o logout desliga por completo o usuario do sistema ( ou deveria ).
public String logout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext .getExternalContext().getSession(false);
session.invalidate();
return "page_login";
}
Gostei muito dos dois exemplos para fechar sessao, eu estava precisando e me ajudou muito, mas ainda estou com um probleminha.
Criei um botao sair no menu do meu sistema e coloquei o codigo:
public String logout() {
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().remove(“beanDoUsuario”);
context.getExternalContext().getSessionMap().remove(“OutrosBeans”);
return "success"
}
COLOQUEI ESSE TAMBEM E DEU CERTO
public String logout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext .getExternalContext().getSession(false);
session.invalidate();
return “page_login”;
}
Quando o usuario clica no botao sair o sistema ira redirecionar para a tela de login, porem depois de redirecionado para o login se o usuario clicar no botao voltar do browser o sistema volta normalmento para a tela anterior com o usuario da sesao e tudo mais, tem como eu impedir isso, para que o usuario ao clicar no botao voltar do browser o sistema nao retorna para a sesao que foi fechada.
Sou iniciante em programação, muito obrigado galera, tudo de bom.
Ola pessoal!
Estou implementando este sistema de invalidar a sessao, mas gostaria de saber pra que serve esse return “page_login”? Isso tem de ser configurado no meu faces-config.xml?
Abracos
Ola pessoal!Estou implementando este sistema de invalidar a sessao, mas gostaria de saber pra que serve esse return “page_login”? Isso tem de ser configurado no meu faces-config.xml?
Abracos
o “page_login” é uma mensagem de texto que é retornada para seu JSF e a partir dessa mensagem vc vai dizer para onde o usuario deve ir apos fechar a sessao, nesse caso, poderia ser outro nome “seunome_login” etc.
flw.
Gostei muito dos dois exemplos para fechar sessao, eu estava precisando e me ajudou muito, mas ainda estou com um probleminha.
Criei um botao sair no menu do meu sistema e coloquei o codigo:public String logout() { FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().getSessionMap().remove(“beanDoUsuario”); context.getExternalContext().getSessionMap().remove(“OutrosBeans”);return "success"}
COLOQUEI ESSE TAMBEM E DEU CERTO
public String logout() { FacesContext facesContext = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) facesContext .getExternalContext().getSession(false); session.invalidate(); return “page_login”; }Quando o usuario clica no botao sair o sistema ira redirecionar para a tela de login, porem depois de redirecionado para o login se o usuario clicar no botao voltar do browser o sistema volta normalmento para a tela anterior com o usuario da sesao e tudo mais, tem como eu impedir isso, para que o usuario ao clicar no botao voltar do browser o sistema nao retorna para a sesao que foi fechada.
Sou iniciante em programação, muito obrigado galera, tudo de bom.
Experimente implementar PhaseListener, assim voce poderá controlar as fases da aplicação antes e após uma requisição.
Configurar a HttpResponse e redirecionar o usuario para outras paginas para manter a segurança da sua aplicação.
Segue o meu exemplo: \o/
Abraços, espero ter ajudado
Daniel, todas essas opções são válidas mas a melhor opção de segurança e pra controle de sessão do seu usuário em JSF é usar o SpringSecurity.
É bem fácil de implementar e atende muito bem aplicações JSF.
Você aca várias implementações na net, e acho interessante dar uma olhada.
[]´s
Baseado nas respostas anteriores, fiz o logout desta forma:
FacesContext context = FacesContext.getCurrentInstance();
//Remove todos os beans da sessão
for (String bean : context.getExternalContext().getSessionMap().keySet()) {
context.getExternalContext().getSessionMap().remove(bean);
}
//Invalida sessão
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.invalidate();