JSF点滴蓄積--PhaseListenerによる権限検証

2572 ワード

PhaseListenerは、1つのポイント(JSFライフサイクルのRestore View phaseフェーズ)で権限検証を行うことで、各ページまたは各backing beanでユーザーアクセス権を判断しすぎて冗長コードや管理上の混乱を回避できます.
ステップ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