通过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的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...
这篇博客文章“jsf验证器与自定义验证”深入探讨了这些概念,并可能提供了实现细节和示例代码。 首先,JSF 内置的验证器是预定义的,用于检查常见的数据格式,如电子邮件地址、电话号码、日期等。这些验证器可以...
这对于开发者来说是一个宝贵的资源,可以帮助理解JSF的工作原理,从而更好地利用这个框架来开发高效、可维护的Web应用。 此外,提到的“玻璃鱼项目”可能指的是GlassFish,这是一个开源的应用服务器,它包含了对JSF...
在JSF中,转换器(Converter)和验证器(Validator)是两个重要的组成部分,它们在处理用户输入数据时起着至关重要的作用。 **转换器(Converter)**: 1. 转换器的主要职责是将用户界面组件的值(通常为字符串)...
在JSF页面中,可以利用`<h:outputLink>`组件结合JSP页面来实现文件下载。`<h:outputLink>`的`value`属性指向JSP页面,通过传递参数(如`filename`)来指定要下载的文件。JSP页面接收这些参数并调用下载方法。 总之...
在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建一个基本的用户登录系统。 首先,登录功能通常包括两部分:前端页面和后端逻辑。在JSF中,前端页面通常由XHTML文件(.xhtml)组成,这些文件结合了...
在本文中,我们将深入探讨如何使用JavaServer Faces (JSF) 创建登录页面,并结合Direct Web Remoting (DWR) 进行实时验证。当我们按下回车键时,系统应能直接执行登录操作,无需额外点击按钮。这为用户提供了一种更...
在本文中,我们将深入探讨如何使用Shale库来实现JavaServer Faces(JSF)应用程序的客户端验证。Shale是一个开源的Java库,它为JSF提供了一系列强大的功能,包括验证框架,可帮助开发者轻松地创建复杂的客户端和...
在本文中,我们将深入探讨如何配置JSF环境以及实现一个简单的登录验证。 首先,我们需要在Apache Tomcat服务器上创建一个新的动态Web项目。在项目设置中,选择JSF作为技术栈,并指定所需的JSF版本。这将自动下载和...
验证器`Validator`接口是JSF验证的基础,开发者可以通过实现`javax.faces.validator.Validator`接口来创建自定义验证器。验证器的使用包括: 1. **注册验证器**: 在faces-config.xml文件中,使用`<validator>`标签...
在JSF中,转换器和验证器是两个关键组件,它们确保了从用户输入到后台模型数据的准确无误的转换和验证。 转换器(Converter)在JSF中扮演着重要的角色,它们负责将用户界面显示的数据格式转化为模型所需的格式,...
在这个示例中,我们创建了一个名为 `EmailValidator` 的自定义验证器,它实现了 `Validator` 接口。该验证器检查电子邮件地址是否有效,并抛出异常以阻止无效输入的保存。 ##### 使用自定义验证器: ```xml ``...
JSF页中关于手机号码验证类,类文件,使用时记得把文件名改一下
jsf结合ajax实现文件上传,值得阅读
在JSF 1.2版本中,为了确保数据输入的正确性和一致性,开发者可以自定义验证器来实现特定的数据验证逻辑。本文将深入探讨如何在JSF 1.2中创建和使用自定义验证器。 自定义验证器是JSF中的一个重要特性,它允许...
这可以通过在Bean中定义验证方法或者使用JSF提供的Validator接口实现。 5. **会话管理**:在登录成功后,通常会将用户信息保存在session中,以便后续页面访问时能识别用户身份。JSF提供了`FacesContext`对象来操作...
**JSF标准的两个实现** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架,它为Web应用开发提供了一种组件化的方法。JSF规范定义了API和事件模型,而具体的实现则由...
总的来说,这个"jsf实现增删改查的一个简单例子"提供了JSF与Hibernate结合的基础应用场景,展示了如何利用这两个技术来构建动态的、数据驱动的Web应用。虽然它没有实现分页,但对于初学者来说,理解这个例子可以帮助...
**JSF(JavaServer Faces)** 是一种Java技术,用于构建Web应用程序的用户界面。...通过分析和学习这个例子,初学者可以了解JSF如何处理用户输入,执行验证,以及如何在Web应用程序中实现用户登录功能。
总之,使用JSF和MyFaces实现文件上传虽然需要一些额外的配置和处理,但通过遵循上述步骤和最佳实践,可以有效地在JavaWeb应用程序中实现这一功能。这不仅提高了用户体验,也增强了应用程序的功能性和实用性。