Olá, estou tendo problemas com o redirecionamento de páginas utilizando o @SessionScoped.
Primeiro vamos começar com o index.xhtml, que faz basicamente a verificação da sessão, ou seja, caso a sessão seja diferente de false, ele me redireciona para a página principal.xhtml, senão ele volta para login.xhtml.
[code]<?xml version='1.0' encoding='UTF-8' ?>
<h:body>
</h:body>
[/code]
Depois, temos a página login.xhtml que apenas pega os dados, e os joga no managedbean, que está referenciado como mbLogin.
[code]<?xml version='1.0' encoding='UTF-8' ?>
.::Login - OnMemo::.<h:body>
<h:form>
<h:panelGrid id="painel">
<h:outputLabel value="Usuário: "/>
<h:inputText value="#{mbLogin.usuario}" required="true"/>
<h:outputLabel value="Senha: "/>
<h:inputSecret value="#{mbLogin.senha}" required="true"/>
<h:commandButton value="Acessar" action="#{mbLogin.logar}"/>
</h:panelGrid>
</h:form>
</h:body>
[/code]
Para conferência, segue abaixo o managedbean:
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.onmemo.managed;
import br.com.onmemo.dao.UsuarioDAO;
import java.io.IOException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpSession;
/**
*
-
@author Yehia Azanki
*/
@ManagedBean(name = “mbLogin”)
@SessionScoped
public class MBLogin {private String usuario;
private String senha;
private boolean loginOK = false;public MBLogin() {
}public String getUsuario() {
return usuario;
}public void setUsuario(String usuario) {
this.usuario = usuario;
}public String getSenha() {
return senha;
}public void setSenha(String senha) {
this.senha = senha;
}public boolean isLoginOK() {
return loginOK;
}public void setLoginOK(boolean loginOK) {
this.loginOK = loginOK;
}public String logar() {
String target = “index”;
try{
if(UsuarioDAO.valida(usuario, senha)){
loginOK = true;
target = “principal”;
FacesContext.getCurrentInstance().addMessage("", new FacesMessage(“Bem-Vindo”,usuario));
}else{
loginOK = false;
target = “login”;
FacesContext.getCurrentInstance().addMessage("", new FacesMessage(“Usuário ou senha inválidos!”));
}
}catch(Exception e){
FacesContext.getCurrentInstance().addMessage(“errorMsg”, new FacesMessage(“Erro ao acessar o banco de dados!”));
target = “erro”;
}return target;}
public String deslogar() {
FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
session.invalidate();
return “login”;
}public void verificarAutorizacao(ComponentSystemEvent e) throws IOException {
if(loginOK == true) {
FacesContext.getCurrentInstance().getExternalContext().redirect(“pages/principal.xhtml”);
}else{
FacesContext.getCurrentInstance().getExternalContext().redirect(“pages/login.xhtml”);
}
}
}[/code]
A página principal.xhtml é apenas uma página simples, sem nada ainda implementado.
Depois de toda a apresentação do conteúdo, vamos ao erro, que se dá quando efetuo o login no sistema:
Podemos perceber que ele faz um monte de redirecionamentos utilizando o contexto pages.
Alguém tem uma explicação para isto?
Grato.