7
respostas

Página sem autorização e sem login

A página /endereco/pais/pais.xhtml, está acessando mesmo sem estar com sessão em login

Testei em dois navegadores.

Meu código Autorizador.java

package org.desif.util;

import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

import org.desif.model.publico.UsuarioEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Autorizador implements PhaseListener {

    private static final long serialVersionUID = -8026934906847652143L;
    private final Logger logger = LoggerFactory.getLogger(Autorizador.class);

    @Override
    public void afterPhase(PhaseEvent evento) {
        FacesContext contexto = evento.getFacesContext();
        String pagina = contexto.getViewRoot().getViewId();
        logger.info(pagina);
        if ("/index.xhtml".equals(pagina)) {
            return;
        }
        UsuarioEntity usuario = (UsuarioEntity) contexto.getExternalContext().getSessionMap()
                .get("usuarioLogadoSistema");
        if (usuario != null) {
            logger.info("Usuário permitido, com o login: " + usuario.getLogin());
            return;
        }
        logger.info("Usuário não permitido.");
        NavigationHandler handler = contexto.getApplication().getNavigationHandler();
        handler.handleNavigation(contexto, null, "/login?faces-redirect=true");
        contexto.renderResponse();
    }

    @Override
    public void beforePhase(PhaseEvent evento) {

    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }

}
7 respostas

Quando vc acessa essa página, passa pelo listener? Vc chegou a testar isso?

Alberto passa sim, vi pelo debug.

Então é só ter certeza que o usuário ta deslogado mesmo... pq pelo seu código, se o usuário tiver deslogado, ele vai chegar no último trecho.

Este trecho ?

handler.handleNavigation(contexto, null, "/login?faces-redirect=true");
contexto.renderResponse();

exatamente.

A questão é que quando clico em logout ou quando entro em outra página que não seja a de login, ele não vai para a tela inicial. Entendeu ?

entendi.. entao vc precisa debugar o seu phaselistener.. eh o que falei, nao vi nada de errado no codigo... vc precisa mandar um debug ou syso para ver onde ta passando na hora do logout e tal.