JSF - login

8 respostas
D

como fechar uma sessão no jsf. Exemplo o usuário clicou em sair preciso destruir o usuário e acabar com este contexto …

8 Respostas

ranophoenix

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. :wink:

Fabricio_Cozer_Marti

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";
}
rodrigoalves639

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.

RenZasso

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

LPJava

RenZasso:
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.

takeshi_spoow

rodrigoalves639:
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

2

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

P

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();
Criado 6 de agosto de 2005
Ultima resposta 18 de jul. de 2011
Respostas 8
Participantes 9