RESTORE_VIEWフェーズの前に実行されるJSF 2.0フェーズリスナーとしてサーブレットフィルタを再実装しました。ロジックをフェーズ・リスナーに移すことで、AJAXリクエストのリダイレクトを処理するJSFの機能を利用することができました。基本的に、JSF 2.0はクライアント側でリダイレクトを行うための適切なAJAX応答を作成します。ユーザーがログインしていない場合は明確にするために、このメカニズムは、AJAXと非AJAX要求のリダイレクトを行うことがある。具体的
、それは次の応答戻って送信されます:。
<?xml version="1.0" encoding="utf-8"?>
<partial-response>
<redirect url="/contextpath/faces/ajax/redirecttarget.xhtml">
</redirect>
</partial-response>"
コードのために位相リスナー:
public PhaseId getPhaseId()
{
return PhaseId.RESTORE_VIEW;
}
public void afterPhase(PhaseEvent event)
{
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession)ec.getSession(false);
if (session==null || session.getAttribute(IS_LOGGED_IN_INDICATOR) == null)
{
try
{
ec.redirect(LOGIN_PAGE_URL);
}
catch(IOException e)
{
// log exception...
}
}
}
位相リスナーが適切でしょうか? – BestPractices
関連:http://stackoverflow.com/questions/9305144/using-jsf-2-0-facelets-is-there-a-way-to-attach-a-global-listener-to-all-ajax/9311920 #9311920 – BalusC