通过PhaseListener 可以在一个点上(JSF生命周期的Restore View phase阶段)进行权限验证,从而避免在每个页面或者每个backing bean中判断用户访问权限,造成过多的冗余代码和管理上的混乱。
步骤一:在faces-config.xml中注册 PhaseListener
xml 代码
- <lifecycle>
- <phase-listener>com.loffler.copycenter.controller.LoggedInCheck</phase-listener>
- </lifecycle>
步骤二:创建实现PhaseListener接口的LoggedInCheck 类。getPhaseId 方法被用来告诉PhaseListener在那一个JSF生命周期阶段该类会被调用。本例使用PhaseId.RESTORE_VIEW。
java 代码
- 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();
-
-
- 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;
- }
- }
步骤三:在 faces-config.xml 文件中注册logout导航规则,对应上面的代码:nh.handleNavigation(fc, null, "logout")。
xml 代码
- <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。
Trackback: http://blog.csdn.net/wu_07/archive/2007/11/18/1891407.aspx
分享到:
相关推荐
JSF+hibernate实现批量删除,CRUD
使用JSF登录页面和DWR验证页面,回车直接登录
JSF页中关于手机号码验证类,类文件,使用时记得把文件名改一下
sun的jsf接口和实现的源文件下载,也可以在玻璃鱼项目中下载到!
jsf结合ajax实现文件上传,值得阅读
jsf用户输入验证,jsf验证器,附页面、java、css代码
这是一个使用jsf框架实现简易登录功能的小例子,对于初学者可以参考一下。
JSF 转换与验证 - 利用 JSF 的转换和验证框架来确保数据模型的完整性.rar
jsf转换器加上验证器,一个很好的原创代码啊,一定要好好学习
这是JSF标准的实现框架,一个是JSF2.0的官方实现,一个是JSF2.2的Apache MyFaces实现。
第7章 JSF转换器和验证器与实例程序 JSF转换器和验证器(熊).ppt convertTest registraction validatorTest
教你使用JSF和MyFaces实现文件上载。
JSF的配置及简单的登陆验证,希望对新手们提供帮助!赚一点点汗钱,不会介意吧
JSF实现文件的下载功能 public static void downloadFile(String path,String fileName) { try { // 获得JSF上下文环境 FacesContext context = FacesContext.getCurrentInstance(); // 获得ServletContext...
最近学习JSF,但资料较少,国内学习的人不多,自己摸索,采用JSF2.2、Hibernate5.0实现的一个JSF例子,简单实现了增删改查,尚未实现分页
NULL 博文链接:https://qianliuyuan123.iteye.com/blog/660610
jsf实现基于ajax的上传例子
JSF数据仓库实现,外加数据库文件,外加可运行DEMO,WEB源码
shale实现jsf客户端验证例子 效果图见 http://halgogo.cnblogs.com
JSF+rich 实现 fileUpload java代码实现上传文件和图片,代码已经测试过,架包完整,下载后可以直接运行