在JSF阶段事件(生命周期事件)中控制页面的访问权限

来源:互联网 发布:淘宝最多有几个橱窗 编辑:程序博客网 时间:2024/05/16 17:23

我们知道在JSF中,每个页面视图都具有自己的生命周期事件,我们也称阶段事件,我们可以在faces-config.xml中配置阶段事件监听器类,如:

该监听器类必须实现javax.faces.event.PhaseListener接口,且必须实现该接口的三个方法,getPhaseId(),beforePhase(),afterPhase()。getPhaseId用于设置在哪个阶段调用周期事件,设置方法是返回一个值:

分为几个阶段:

Restore_View:当(重新)访问JSP的时候,重建server端组件树。

Apply_Request Value:将request parameters 复制到component submitted values

Process_Validators:执行验证。

Update_Model Values:更新model数据:<h:inputText value="#{user.name}"/>

Invoke_Application:调用应用程序:Action。

Render_Response:渲染Response:保存状态并装载下一个视图。

beforePhase(),afterPhase()方法是要调用的事件方法,分为阶段事件发生前还是发生后。

 

鉴于JSF阶段事件在每次页面呈现时,即Render_Response阶段,会产生事件调用,因而,在其发生前的调用方法中通过检查权限来判断是否让页面呈现,也就是在beforePhase方法中实现检查逻辑,代码如下:

 

这种设计的优点:

  1. 不影响原有的业务逻辑代码的情况下,对页面进行权限控制;
  2. 集中处理页面权限,简单而高效;
  3. 可以实现多种角色的权限控制。