Chinaunix首页 | 论坛 | 博客
  • 博客访问: 554216
  • 博文数量: 855
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:08
文章分类

全部博文(855)

文章存档

2011年(1)

2008年(854)

我的朋友

分类:

2008-10-16 19:25:09

     版权声明:本作品已刊登在《IT实验室周报》第04-05期第07版,作者David。版权属于《IT实验室周报》与中国IT实验室网站共同所有,禁止任何媒体、网站或个人在未经书面授权的情况下转载、摘编或利用其它方式使用上述作品。已经授权使用作品的,应在授权范围内使用,并注明“来源:IT实验室周报”。违反上述声明者将追究其相关法律责任。

 

   在 Web开发中,bean涉及到两个不同的概念,认证和授权。前者是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。JSF (JavaServer Faces) 是J2EE 5开发平台的组成部分,作为表示层的技术,越来越受到Java开发人员的亲睐。在开发过程中,JSP通过DI 技术很方便的和使用类似技术的 Spring 进行整合。JSF在与Acegi系统结合之后,让JavaBean的安全性得到很大提高。

    Acegi是一个用于Spring的安全框架,与JSF结合,提供了安全和认证安全服务框架。Acegi安全系统一个很重要的特点就是它并没有角色和用户组的概念。Acegi安全系统目前支持两类安全管理对象。第一类是为了使Spring管理的Bean可以作为MethodInvocation来使用,Bean可以通过ProxyFactoryBean和BeanNameAutoProxyCreator来管理,就像在Spring的事务管理一样使用。第二类是FilterInvocation。它用过滤器(Filter)来创建,并简单地包装了HTTP的ServletRequest,ServletResponse和FilterChain。FilterInvocation可以用来保护HTTP资源。通常,开发人员并不需要了解它的工作机制,因为他们只需要将Filter加入web.xml,Acegi安全系统就可以工作了。

    本文用一个简单的Web应用实例的Apache myfaces jsf的执行情况向大家展示,如何使用Spring的application context整合acegi的认证和授权的功能,达到JSF的应用。读者可以理解到Acegi如何落实URL级别的角色授权,以及如何实施Acegi的业务层的安全说明。

    示例应用程序是一个用户登录购买的页面。用户登录窗口输入正确的用户名和密码,重定向到一个网页,在新的网页中用户可能发生购买行为等。我们将使用Acegi安全框架的配置安全的细节,确保用户的ID已经验证,并且他的存在对购买页的授权。用户可以访问购买页,如果有作用role_urlaccess 。就确保了用户作出的购买行为是一个安全的商业行为。JSF与Acegi安全授权验证中牵涉到Acegi、JSF、Spring 三个框架,大致的流程如图介绍。

   

    第一步:用户访问JSF网页

    第二步:Acegi检查访问用户是否被授权访问该页面。

    第三步:如果授权验证是有效的,就将控制权交给一个为JSF服务的界面servlet。

    第四步:在准备的过程中,JSF将会找到Catalog bean。

    第五步:JSF检查界面结构文件(Faces configuration file)来寻找已经定义好的Catalog,并且实例化。Catalog bean的publicData以及privateData 属性参数会被写入到没有被具体化的publicCatalog、privateCatalog beans。

    第六步:JSF利用Spring的 DelegatingVariableResolver 可变解析器解释 publicCatalog和 privateCatalog bean。

    第七步:JSF利用Acegi 生成获得publicCatalog 和 privateCatalog beans方法,读取公共数据和私有数据。

    第八步:Acegi再次执行它的认证进程来访问bean。

    第九步:当Acegi获得用户成功地访问了bean信息后,系统将产生一个获取方法来读取公共和私有的数据,并且将数据传送给JSF。

    第十步:JSF调用目录bean的设置方法,将公共和私有数据写入Catalog bean

    第十一步:JSF执行其周期完成,并顺利传送页面JSF。

    这样,一个用户从输入用户到进入系统,进行购买操作的流程就完成。在这个过程中,Acegi与JSF一起完成了用户的认证授权工作。相对于JSP用户访问授权的过程,JSF的生命周期要比JSP复杂得多。JSP的生命周期非常简单,页面被执行时,HTML标记立即被生成了,生命周期随即结束。而一个完整的JSF-Acegi请求-处理生命周期被精心规划为11个阶段,但JSF框架会管理这一切,所以,程序员在获得更多控制能力的同时,工作量并没有增加,同时也让系统安全性能得到较大的提高。总的来说,案例相对简单,但是JSF-Acegi安全处理是非常到位的,借助本文,笔者希望大家对JSF以及Acegi给与更多关注。

【责编:Stephen】

--------------------next---------------------

阅读(263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~