JSF点滴蓄積--PhaseListenerによる権限検証
PhaseListenerは、1つのポイント(JSFライフサイクルのRestore View phaseフェーズ)で権限検証を行うことで、各ページまたは各backing beanでユーザーアクセス権を判断しすぎて冗長コードや管理上の混乱を回避できます.
ステップ1:faces-config.xmlにPhaseListenerを登録する
ステップ2:PhaseListenerインタフェースを実装するLoggedInCheckクラスを作成する.getPhaseIdメソッドは、そのJSFライフサイクルの段階でクラスが呼び出されることをPhaseListenerに伝えるために使用される.本例ではPhaseIdを用いる.RESTORE_VIEW.
ステップ3:faces-config.xmlファイルにlogoutナビゲーションルールを登録し、上のコード:nhに対応する.handleNavigation(fc, null, "logout").
本稿の原作者はAaron Bartellであり、iSeriesNetworkに最初に発表された.com’s Club Tech Tips email newsletter.
注意:JSFではFilterで権限検証を行うこともできますが、ナビゲーション方式ではForwardとRedirectが異なるため、getRequestURIで得られるURIは必ずしも現在のViewではないことが多いため、PhaseListenerでの権限検証はFilterよりも優れています.
引用:
http://blog.csdn.net/wu_07/article/details/1891407
ステップ1:faces-config.xmlにPhaseListenerを登録する
<lifecycle>
<phase-listener>com.loffler.copycenter.controller.LoggedInCheck</phase-listener>
</lifecycle>
ステップ2:PhaseListenerインタフェースを実装するLoggedInCheckクラスを作成する.getPhaseIdメソッドは、そのJSFライフサイクルの段階でクラスが呼び出されることをPhaseListenerに伝えるために使用される.本例ではPhaseIdを用いる.RESTORE_VIEW.
package com.mowyourlawn.controller;
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;
public class LoggedInCheck implements PhaseListener {
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
public void beforePhase(PhaseEvent event) {
}
public void afterPhase(PhaseEvent event) {
FacesContext fc = event.getFacesContext();
// Check to see if they are on the login page.
boolean loginPage =
fc.getViewRoot().getViewId().lastIndexOf("login") > -1 ? true : false;
if (!loginPage && !loggedIn()) {
NavigationHandler nh = fc.getApplication().getNavigationHandler();
nh.handleNavigation(fc, null, "logout");
}
}
private boolean loggedIn() {
return LoginController.loggedIn().booleanValue()c;
}
}
ステップ3:faces-config.xmlファイルにlogoutナビゲーションルールを登録し、上のコード:nhに対応する.handleNavigation(fc, null, "logout").
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
本稿の原作者はAaron Bartellであり、iSeriesNetworkに最初に発表された.com’s Club Tech Tips email newsletter.
注意:JSFではFilterで権限検証を行うこともできますが、ナビゲーション方式ではForwardとRedirectが異なるため、getRequestURIで得られるURIは必ずしも現在のViewではないことが多いため、PhaseListenerでの権限検証はFilterよりも優れています.
引用:
http://blog.csdn.net/wu_07/article/details/1891407