Como restringir acesso a uma página em JSF?

Pessoal,
estou com dúvida na maneira com a qual posso restringir o acesso a uma página em JSF a um usuário que ainda não efetuou o login?
Sei que a maneira tradicional de fazer isso é colocar um atributo “autorizado” na sessão e a cada request verificar se autorizado é true ou false. Quando o usuário se loga corretamente atualizar “autorizado” para true.

O problema está na fase do processamento do request em que vou fazer esta análise.

Restore View: nunca vou conseguir entrar na aplicação, uma vez que o atributo só é atualizado na fase invoke application.

Render Reponse: caso tenha sido enviado algum parâmetro, os meus objetos do modelo já terão sido atualizados, mesmo sendo uma “requisição inválida”.

Demais fases: não irei entrar nas outras fases caso a árvore de componentes da requisição ainda não exista.

Alguém já enfrentou este problema ou tem alguma idéia de como resolvê-lo?

Consegui resolver!

Adicionei um PhaseListener que executa a verificação antes da fase Restore View (método public void beforePhase(PhaseEvent event)).
Este método verifica duas coisas, se a variável autorizado está true e qual a página requisitada. Se a página requisitada for diferente da página de login e autorizado = false, redireciono o usuario para a pagina de login.

boolean autorizado = false;
String paginaRequisitada = null;
Avaliador a;
ExternalContext ce;

//vou recuperar o contexto externo atual
ce = FacesContext.getCurrentInstance().getExternalContext();

//vou tentar recuperar o objeto avaliador da sessao
a = (Avaliador)ce.getSessionMap().get(“autenticador”);

//vou verificar se o usuario ja esta logado ou nao
if (a != null)
autorizado = a.isHabilitado();

//vou recuperar a pagina requisitada
paginaRequisitada = ce.getRequestServletPath();

/se o usuario requisitar uma pagina diferente da pagina de login vou verificar se ele ja esta logado. Se ele ainda nao estiver logado, o redireciono para a pagina de login/
if (!"/autenticacao.faces".equals(paginaRequisitada))
if (!autorizado)
try
{
ce.redirect("/nomeDaAplicação/autenticacao.jsp");
}
catch(Exception e)
{
}