Boa tarde senhores, estou com um problema chato, que ja me deu alguma dor de cabeça, então vim aqui para pedir a ajuda dos senhores…
Na minha aplicação JSF, tenho meu PhaseListener, aonde através dele controlo o acesso as páginas, ou seja se o usuário estiver logado e com permissão ele poderá acessar o conteúdo correspondente. Pois bem até aí tudo beleza.
També criei uma classe FacesContextUtil aonde nela tenho diversos métodos, como em especial o método setNavegacao(). O mesmo é responsável por receber uma string e através dessa string setar a navegação de acordo com o navigation-rule no meu faces config. pelo método foward funciona que é uma beleza, porém gostaria de utilizar o redirect, e quando defino no meu faces config o <redirect /> a página não consegue ser carregada…
Bem segue os fragmentos do código que fazem esse procedimento se alguem puder ajudar agradeço!
Segue minha navigation Rule
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<!-- quando o outcome provem desse método sair, o redirect funciona corretamente -->
<from-action>#{loginBean.sair}</from-action>
<from-outcome>loginOUT</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
<redirect />
</navigation-case>
<!-- aqui a <from-action></from-action> não é definida, essa é a regra de naveção que redireciona para a página de login, quando um usuário que não esteja logado tenta acessar uma página restrita AQUI NÃO FUNCIONA-->
<navigation-case>
<from-outcome>loginOUT</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
[code]
if(fase.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
{
LoginBean loginBean = (LoginBean)FacesContextUtil.getSessionAttribute(“loginBean”);
//Aqui faço a validação para verificar se o existe um usuário na sessão, caso retorne falso, ele será redirecionado para a página de login
FacesContextUtil.setNavegacao(“loginOUT”);
}[/code]
Método contido na classe FacesContextUtil
public static void setNavegacao(String outcome) {
FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), null,outcome);
}