快速业务通道

使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
看到,web.xml 文件要部署 Acegi 以保护 JSF 应用程序所需 的所有标记。您已经了解了侦听器、过滤器和 servlet 如何相互协作。从这里 的讨论中可以看出,如果在 servlet 容器中部署 清单 1 中的 web.xml 文件, Acegi 和 JSF 都试图在两种情形下进行一些处理:

当启动应用程序时

当应用程序收到对 JSF 页面的请求时

接下来的两节解释每种情况中发生的一系列事件。

启动 JSF-Acegi 应用程序

图 1 展示了在 JSF-Acegi 应用程序启动时发生的事件顺序:

图 1. JSF-Acegi 应用程序启动时发生的事件顺序

使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序(5)

时间:2011-09-07 ibm Bilal Siddiqui

详细来讲,图 1 显示的事件顺序如下所示:

servlet 容器实例化在 web.xml 文件中配置的所有侦听器。

servlet 容器将 Acegi 的 ContextLoaderListener 注册为一个侦听器类, 该类实现 javax.servlet.ServletContextListener接口。 ServletContextListener 接口包含两个重要方法:contextInitialized() 和 contextDestroyed():

contextInitialized() 方法在初始化 servlet 上下文时获得控制权。

类似地,当应用程序退出时,contextDestroyed() 方法会被调用,并消除 servlet 上下文。

servlet 容器将 JSF 的 ConfigureListener 注册为另一个侦听器。JSF 的 ConfigureListener 实现许多侦听器接口,比如 ServletContextListener、 ServletContextAttributeListener、 ServletRequestListener,以及 ServletRequestAttributeListener。您已经看到了 ServletContextListener 接口的方法。余下的接口是:

ServletContextAttributeListener,它包含 3 种方法:attributeAdded() attributeRemoved() 和 attributeReplaced()。这 3 种方法分别在某个属性被 添加到 servlet 上下文、被从 servlet 上下文删除、被新属性取代时获得控制 权。attributeReplaced() 方法在 处理对受 Acegi 保护的 JSF 页面的请求 小 节的第 8 步中获得控制权。

ServletRequestListener 中包含的方法在创建或删除新的 servlet 请求对 象时获得控制权。servlet 请求方法表示并包装来自用户的请求。

ServletRequestAttributeListener 中包含的方法在添加、删除或替换某个 请求对象的属性时获得控制权。本文稍后将讨论在 处理对受 Acegi 保护的 JSF 页面的请求 小节的第 3 步中创建一个新的请求对象时,JSF 的 ConfigureListener 执行的处理。

servlet 容器创建一个 servlet 上下文对象,该对象封装应用程序资源(比 如 JSP 页面、Java 类和应用程序初始化参数),并允许整个应用程序访问这些 资源。JSF-Acegi 应用程序的所有其他组件(侦听器、过滤器,以及 servlet) 在 servlet 上下文对象中以属性的形式存储与应用程序资源相关的信息。

servlet 容器通知 Acegi 的 ContextLoaderListener,servlet 上下文是通 过调用 ContextLoaderListener 的 contextInitializated() 方法初始化的。

contextInitialized() 方法解析 Acegi 的配置文件,为 JSF-Acegi 应用程 序创建 Web 应用程序上下文,以及实例化所有的安全过滤器和在 Acegi 配置文 件中配置的 Jave bean。在以后 JSF 应用程序收到来自客户机的请求时,这些 过滤器对象将会用于身份验证和授权(参阅 第 3 部分 中关于 Web 应用程序上 下文创建的讨论和图 1)。

servlet 容器通知 JSF 的 ConfigureListener,servlet 上下文是通过调用 contextInitialized() 方法初始化的。

contextInitialized() 方法检查在 JSF 配置文件中配置的所有 JSF 托管 bean,确保 Java 类与每个 bean 并存。

servlet 容器检查 web.xml 文件中任何配置的过滤器。例如,清单 1 中的 web.xml 文件包含一个 Acegi 过滤器 Filte

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号