일부 페이지에 대한 사용자 액세스를 제어하는 PhaseListener가 있습니다. 사용자가 로그인하지 않은 경우 loginpage로 리디렉션됩니다.handleNavigation이 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>
나는 단지 당신의 [blog] (http://balusc.blogspot.com/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html)를보고 있었고 여기 있다! – Apurv
@Apurv : 시로 힌트에 감사드립니다. Shiro는 서블릿 필터도 사용하고 있습니다.) – BalusC
감사합니다. 지금 오류가 표시됩니다. beforePhase 메서드를 사용하면 문제가 없습니다. – user1352652