一部のページへのユーザーアクセスを制御する PhaseListener があります。ユーザーがログインしていない場合、ログインページにリダイレクトされます。
問題は、私のメソッド handleNavigation がユーザーをリダイレクトしていないことです。実行されますが、ユーザーはリダイレクトされません。
ユーザーがアクセスできない URL を入力すると、メソッドは実行されますが、ログイン ページにリダイレクトされずにページが開きます。
なにが問題ですか?
public class AuthorizationListener implements PhaseListener {
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
String currentPage = facesContext.getViewRoot().getViewId();
boolean isLoginPage = (currentPage.lastIndexOf("login.xhtml") > -1);
if(isLoginPage)
return;
if(currentPage.indexOf("/rws/") != -1)
{
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
Object currentUser = session.getAttribute("usuario");
if (!isLoginPage && currentUser == null) {
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "loginPage");
}
}
}
public void beforePhase(PhaseEvent event) {
System.out.println("Hellow World");
}
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
}
私の顔構成
<navigation-rule>
<from-view-id>/*</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>br.com.testes.filter.AuthorizationListener</phase-listener>
</lifecycle>