Boas pessoal, tudo bem com vocês?
Criei um PhaseListener e preciso que o mesmo “bloqueie” apenas paginas de um diretorio específico.
Tenho dentro da raiz de paginas de meu projeto (PASTA WEB) a tela de login e cadastro, dentro desta mesma raiz tenho uma pasta privada, que deve
ser protegida com o PhaseListener.
O codigo que tenho nao me permite acessar a pagina cadastro, ele sempre me redireciona para a pagina de login.
Como posso alterar ou o que devo fazer para que seja protegida somente a pasta privada?
faces-config.xml
[code]<?xml version='1.0' encoding='UTF-8'?>
<navigation-rule>
<from-view-id>/Pages/*</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<lifecycle>
<phase-listener>Filter.AuthorizationListener</phase-listener>
</lifecycle>
[/code]
AuthorizationListener.java
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package Filter;
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 javax.servlet.http.HttpSession;
public class AuthorizationListener implements PhaseListener {
@Override
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
String currentPage = facesContext.getViewRoot().getViewId();
boolean isLoginPage = (currentPage.lastIndexOf("login.xhtml") > -1);
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
Object currentUser = session.getAttribute("usuarioLogado");
if (!isLoginPage && currentUser == null) {
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "login.xhtml");
}
}
/**
*
* @param event
*/
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
[/code]