`

jsf利用PhaseListener实现权限验证

    博客分类:
  • jsf
阅读更多

通过PhaseListener 可以在一个点上(JSF生命周期的Restore View phase阶段)进行权限验证,从而避免在每个页面或者每个backing bean中判断用户访问权限,造成过多的冗余代码和管理上的混乱。

步骤一:在faces-config.xml中注册 PhaseListener

xml 代码
 
  1. <lifecycle>  
  2. <phase-listener>com.loffler.copycenter.controller.LoggedInCheck</phase-listener>  
  3. </lifecycle>  

步骤二:创建实现PhaseListener接口的LoggedInCheck 类。getPhaseId 方法被用来告诉PhaseListener在那一个JSF生命周期阶段该类会被调用。本例使用PhaseId.RESTORE_VIEW。

java 代码
  1. package com.mowyourlawn.controller;
  2. import javax.faces.application.NavigationHandler;
  3. import javax.faces.context.FacesContext;
  4. import javax.faces.event.PhaseEvent;
  5. import javax.faces.event.PhaseId;
  6. import javax.faces.event.PhaseListener;
  7. public class LoggedInCheck implements PhaseListener {
  8. public PhaseId getPhaseId() {
  9. return PhaseId.RESTORE_VIEW;
  10. }
  11. public void beforePhase(PhaseEvent event) {
  12. }
  13. public void afterPhase(PhaseEvent event) {
  14. FacesContext fc = event.getFacesContext();
  15. // Check to see if they are on the login page.
  16. boolean loginPage =
  17. fc.getViewRoot().getViewId().lastIndexOf("login") > -1 ? true : false;
  18. if (!loginPage && !loggedIn()) {
  19. NavigationHandler nh = fc.getApplication().getNavigationHandler();
  20. nh.handleNavigation(fc, null, "logout");
  21. }
  22. }
  23. //验证是否已经登陆
  24. private boolean loggedIn() {
  25. return LoginController.loggedIn().booleanValue()c;
  26. }
  27. }

步骤三:在 faces-config.xml 文件中注册logout导航规则,对应上面的代码:nh.handleNavigation(fc, null, "logout")。

xml 代码
 
  1. <navigation-rule>  
  2.   <from-view-id>*</from-view-id>  
  3.     <navigation-case>  
  4.       <from-outcome>logout</from-outcome>  
  5.       <to-view-id>/login.jsp</to-view-id>  
  6.     </navigation-case>  
  7. </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

分享到:
评论
7 楼 sech 2009-04-13  
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>

设置了吗?
不行的话,就设置成
 <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

试试(前提条件是必须要有index.jsp)
6 楼 samwongcn 2009-04-13  
sech 写道

修改配置文件

配置文件已经有
<welcome-file-list>
<welcome-file>index.faces</welcome-file>
</welcome-file-list>

还有什么其他地方要注意的么?
5 楼 sech 2009-04-13  
修改配置文件
4 楼 samwongcn 2009-04-12  
用http://localhost:8080/XXXWeb/index.faces的时候,
可以正常自动调转到登陆界面

用http://localhost:8080/XXXWeb/
提示错误:
type Status report
message /XXXWeb/
description The requested resource (/XXXWeb/) is not available


请问这是怎么回事?
3 楼 sech 2009-03-17  
yywill 写道

敢问LoginController你是怎么写的?
能贴出来看看么


代码如下:
/**
 * 
 */
package com.qian.check;

import com.qian.bean.AdminBean;
import com.qian.bean.BeanNames;
import com.qian.util.FacesUtils;

/**
 * @author sech
 * 
 */
public class LoginController {

	/**
	 * 
	 */
	public LoginController() {
		// TODO Auto-generated constructor stub
	}

	public static boolean loggedIn() {
		AdminBean adminBean = FacesUtils.getAdminBean();
		if (adminBean.getLoggedIn() && adminBean.getId() != null) {
			return true;
		}
		FacesUtils.resetManagedBean(BeanNames.ADMIN_BEAN);
		return false;
	}
}

2 楼 yywill 2009-03-15  
敢问LoginController你是怎么写的?
能贴出来看看么
1 楼 ccing 2008-07-19  
[b][/b][u][/u]
引用

    [*]

    [*]

    [*]

    [*]

    [*]

    [*]

    [*]
 

相关推荐

    JSF+hibernate实现批量删除

    本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...

    jsf验证器与自定义验证

    这篇博客文章“jsf验证器与自定义验证”深入探讨了这些概念,并可能提供了实现细节和示例代码。 首先,JSF 内置的验证器是预定义的,用于检查常见的数据格式,如电子邮件地址、电话号码、日期等。这些验证器可以...

    sun的jsf接口和实现的源文件下载

    这对于开发者来说是一个宝贵的资源,可以帮助理解JSF的工作原理,从而更好地利用这个框架来开发高效、可维护的Web应用。 此外,提到的“玻璃鱼项目”可能指的是GlassFish,这是一个开源的应用服务器,它包含了对JSF...

    JSF(转换器+验证器)

    在JSF中,转换器(Converter)和验证器(Validator)是两个重要的组成部分,它们在处理用户输入数据时起着至关重要的作用。 **转换器(Converter)**: 1. 转换器的主要职责是将用户界面组件的值(通常为字符串)...

    JSF文件下载实现

    在JSF页面中,可以利用`&lt;h:outputLink&gt;`组件结合JSP页面来实现文件下载。`&lt;h:outputLink&gt;`的`value`属性指向JSP页面,通过传递参数(如`filename`)来指定要下载的文件。JSP页面接收这些参数并调用下载方法。 总之...

    jsf实现登录功能

    在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建一个基本的用户登录系统。 首先,登录功能通常包括两部分:前端页面和后端逻辑。在JSF中,前端页面通常由XHTML文件(.xhtml)组成,这些文件结合了...

    JSF登录页面和DWR验证,回车直接登录

    在本文中,我们将深入探讨如何使用JavaServer Faces (JSF) 创建登录页面,并结合Direct Web Remoting (DWR) 进行实时验证。当我们按下回车键时,系统应能直接执行登录操作,无需额外点击按钮。这为用户提供了一种更...

    shale实现jsf客户端验证例子

    在本文中,我们将深入探讨如何使用Shale库来实现JavaServer Faces(JSF)应用程序的客户端验证。Shale是一个开源的Java库,它为JSF提供了一系列强大的功能,包括验证框架,可帮助开发者轻松地创建复杂的客户端和...

    JSF配置以及简单的登陆验证

    在本文中,我们将深入探讨如何配置JSF环境以及实现一个简单的登录验证。 首先,我们需要在Apache Tomcat服务器上创建一个新的动态Web项目。在项目设置中,选择JSF作为技术栈,并指定所需的JSF版本。这将自动下载和...

    JSF 转换与验证 - 利用 JSF 的转换和验证框架来确保数据模型的完整性.rar

    验证器`Validator`接口是JSF验证的基础,开发者可以通过实现`javax.faces.validator.Validator`接口来创建自定义验证器。验证器的使用包括: 1. **注册验证器**: 在faces-config.xml文件中,使用`&lt;validator&gt;`标签...

    第7章 JSF转换器和验证器与实例程序

    在JSF中,转换器和验证器是两个关键组件,它们确保了从用户输入到后台模型数据的准确无误的转换和验证。 转换器(Converter)在JSF中扮演着重要的角色,它们负责将用户界面显示的数据格式转化为模型所需的格式,...

    jsf用户输入验证

    在这个示例中,我们创建了一个名为 `EmailValidator` 的自定义验证器,它实现了 `Validator` 接口。该验证器检查电子邮件地址是否有效,并抛出异常以阻止无效输入的保存。 ##### 使用自定义验证器: ```xml ``...

    JSF页中手机号码验证类

    JSF页中关于手机号码验证类,类文件,使用时记得把文件名改一下

    jsf+ajax实现文件上传

    jsf结合ajax实现文件上传,值得阅读

    JSF1.2自定义验证器的实现

    在JSF 1.2版本中,为了确保数据输入的正确性和一致性,开发者可以自定义验证器来实现特定的数据验证逻辑。本文将深入探讨如何在JSF 1.2中创建和使用自定义验证器。 自定义验证器是JSF中的一个重要特性,它允许...

    用jsf做的登录注册的组件

    这可以通过在Bean中定义验证方法或者使用JSF提供的Validator接口实现。 5. **会话管理**:在登录成功后,通常会将用户信息保存在session中,以便后续页面访问时能识别用户身份。JSF提供了`FacesContext`对象来操作...

    JSF标准的两个实现

    **JSF标准的两个实现** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架,它为Web应用开发提供了一种组件化的方法。JSF规范定义了API和事件模型,而具体的实现则由...

    jsf实现增删改查的一个简单例子

    总的来说,这个"jsf实现增删改查的一个简单例子"提供了JSF与Hibernate结合的基础应用场景,展示了如何利用这两个技术来构建动态的、数据驱动的Web应用。虽然它没有实现分页,但对于初学者来说,理解这个例子可以帮助...

    jsf 登录验证程序

    **JSF(JavaServer Faces)** 是一种Java技术,用于构建Web应用程序的用户界面。...通过分析和学习这个例子,初学者可以了解JSF如何处理用户输入,执行验证,以及如何在Web应用程序中实现用户登录功能。

    使用JSF和MyFaces实现文件上载

    总之,使用JSF和MyFaces实现文件上传虽然需要一些额外的配置和处理,但通过遵循上述步骤和最佳实践,可以有效地在JavaWeb应用程序中实现这一功能。这不仅提高了用户体验,也增强了应用程序的功能性和实用性。

Global site tag (gtag.js) - Google Analytics