JSF 访问权限

JSF  是基于事件驱动的

所以 下面 就 基于 在JSF阶段事件(生命周期事件)中控制页面的访问权限 

<!--EndFragment-->

 

主要是 实现一个生命周期监听接口  javax.faces.event.PhaseListener

 

public class SecurityLifeListener implements PhaseListener{

 

public void afterPhase(PhaseEvent arg0) {

 }

 

 

public void beforePhase(PhaseEvent event) {

//设置 ViewRoot

FacesContext fc = event.getFacesContext().getCurrentInstance();

UIViewRoot uiv = new UIViewRoot();

 

//根据实际情况 设置跳转页面

uiv.setViewId("/login.jsp");
    fc.setViewRoot(uiv);

 

//或者直接根据你配置文件的导航 来设置

 

// logout 来自配置文件  

 

NavigationHandler nh = fc.getApplication().getNavigationHandler();
                nh.handleNavigation(fc, null, "logout");

<!--EndFragment-->

 

 

//还可以使用  常用的HTTP对象

 

(HttpServletRequest) FacesContext.getCurrentInstance()
    .getExternalContext().getRequest()

 

 

}

 

 

/**
  * 参数说明 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:保存状态并装载下一个视图。
  *
  */

 

public PhaseId getPhaseId() {
  return PhaseId.RENDER_RESPONSE;
 }

 

 

 

}

 

 

当然我们使用 javax.servlet.Filter 来进行访问权限控制 也行 ,但是没有比上面的方法来得更直接的了

 

我们通过上面的方法就明白 ,其实这个生命周期监听 和拦截器 很相似的 。它主要是控制某个生命周期的前后做什么处理

 

当然我们想让这个 监听响应的JSF生命周期的类生效 还需要下面的配置:

 

<lifecycle> <phase-listener id="securityListener"> com.SecurityLifeListener </phase-listener> </lifecycle>

 

 

下面说明它的优点:

  

不影响原有的业务逻辑代码的情况下,对页面进行权限控制; 

 

集中处理页面权限,简单而高效。

 

你可能感兴趣的:(jsp,servlet,JSF)