로그 아웃 버튼을 클릭하면 사용자를 시작보기로 리디렉션하고 싶습니다. 로그 아웃이 올바르게 완료되고 시작보기가 요청 된 후 사용자에게 로그인 페이지가 표시됩니다. 지금까지는 그렇게 좋았습니다. 시작 화면이 보호되고 로그인 페이지로 리디렉션되는 위상 수신기로 가로 채기 때문에 내가 원하는 것입니다.로그 아웃 후 리디렉션이 JSF2 탐색 규칙에서 작동하지 않습니다.
로그 아웃 동작 :
public String logout() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
// invalidate session
Object session = externalContext.getSession(false);
HttpSession httpSession = (HttpSession) session;
httpSession.invalidate();
// let the navigation rule decide where to go...
return null;
}
얼굴 탐색 규칙 :
는<navigation-rule>
<navigation-case>
<from-action>#{loginBean.logout}</from-action>
<to-view-id>/faces/index.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
ForceLoginListener :
는 사용자에게 표시되는 URL입니다@Override
public void beforePhase(PhaseEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
// extract view id from original request
String viewId = context.getViewRoot().getViewId();
if (// viewId is an 'protected' view AND not logged in //) {
Application app = context.getApplication();
// redirect to the login view
ViewHandler viewHandler = app.getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, Constants.LOGIN_VIEW);
context.setViewRoot(viewRoot);
}
}
@Override
public void afterPhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
내가 지금 가지고있는 문제가 있음 시작보기 또는 로그인보기가 아니라 사용하기 바로 전에 활성화 된보기입니다 r 로그 아웃 버튼을 눌렀습니다.
탐색 규칙의 리디렉션이 다른 모든 내비게이션의 경우처럼 트릭을 수행해야한다고 생각했지만이 경우에는 작동하지 않습니다. 아무도 왜 그런 생각을 갖고 있니? 사전에
감사합니다.
PhaseListener를 추가해야하는 이유가 없습니다. 로그 아웃없이 사용해 보셨습니까? 어떤 차이가 있니? –
PhaseListener는 '보호 된'페이지에 대한 요청을 차단합니다. 로그 아웃이 아닙니다. 요청 흐름은 다음과 같습니다. 일부 pageX가 표시되고, 로그 아웃 버튼, 탐색 규칙을 통해 색인으로 리디렉션, 위상 수신기가 로그인보기를 가로 채고 설정합니다. 여기서 흐름이 멈 춥니 다. 브라우저가 위치 필드에 색인을 표시한다고 가정했지만 여전히 pageX가 작성되었습니다. – Joysn