- 浏览: 83569 次
- 性别:
- 来自: 郑州市
-
文章分类
最新评论
-
kellen_liu:
学习了!!
ipc$ -
gdljg0460:
[color=orange][/color]lkkk
过滤器(filter)在web 中的应用 -
jasongreen:
我一直用它,好东西
过滤器(filter)在web 中的应用 -
love_y:
强烈支持~!
过滤器(filter)在web 中的应用 -
love_y:
强烈支持~!
过滤器(filter)在web 中的应用
第 1 部分: 架构概览和安全过滤器
使用 Acegi Security System 实现基于 URL 的安全性
Acegi Security System 是一种功能强大并易于使用的替代性方案,使您不必再为 Java 企业应用程序编写大量的安全代码。虽然它专门针对使用 Spring 框架编写的应用程序,但是任何类型的 Java 应用程序都没有理由不去使用 Acegi。
下载 Acegi,这样才能编译本文的示例代码并运行本文的样例应用程序。还必须有作为工作站的一部分运行的 Tomcat 服务器。
由于企业内容管理(ECM)应用程序管理存储在不同类型数据源(如文件系统、关系数据库和目录服务)中的企业内容的编写和处理,ECM 安全性要求对这些数据源的访问进行控制。比如,一个 ECM 应用程序可能会控制被授权读取、编辑或删除数据的对象,而这些数据和制造业企业的设计、市场营销、生产以及质量控制有关。
在一个 ECM 安全场景中,比较常见的就是通过对企业资源定位符(或网络地址)应用安全性,从而实现访问控制。这种简单的安全模型被称为统一资源定位符 或 URL 安全性。正如我在本文后面(以及本系列后续文章)所演示的一样,Acegi 为实现 URL 安全性提供了全面的特性。
然而,在很多企业场景中,URL 安全性还远远不够。比如,假设一个 PDF 文档包含某个制造业公司生产的特殊产品的数据。文档的一部分包含了将由该公司的设计部门编辑和更新的设计数据。另一部分包含了生产经理将使用的生产数据。对于诸如此类的场景,需要实现更加细粒度的安全性,对文档的不同部分应用不同的访问权限。
本文介绍了 Acegi 为实现 URL 安全性而提供的各种功能。本系列的下一篇文章将演示此框架的基于方法的安全性,它提供了对企业数据访问的更细粒度的控制。
Acegi Security System 使用安全过滤器来提供企业应用程序的身份验证和授权服务。该框架提供了不同类型的过滤器,可以根据应用程序的需求进行配置。您将在本文后面了解到 安全过滤器的不同类型;现在,只需注意可以为如下任务配置 Acegi 安全过滤器:
- 在访问一个安全资源之前提示用户登录。
- 通过检查安全标记(如密码),对用户进行身份验证。
- 检查经过身份验证的用户是否具有访问某个安全资源的特权。
- 将成功进行身份验证和授权的用户重定向到所请求的安全资源。
- 对不具备访问安全资源特权的用户显示 Access Denied 页面。
- 在服务器上记录成功进行身份验证的用户,并在用户的客户机上设置安全 cookie。使用该 cookie 执行下一次身份验证,而无需要求用户登录。
- 将身份验证信息存储在服务器端的会话对象中,从而安全地进行对资源的后续请求。
- 在服务器端对象中构建并保存安全信息的缓存,从而优化性能。
- 当用户退出时,删除为用户安全会话而保存的服务器端对象。
- 与大量后端数据存储服务(如目录服务或关系数据库)进行通信,这些服务用于存储用户的安全信息和 ECM 的访问控制策略。
正如这个列表显示的那样,Acegi 的安全过滤器允许您执行保护企业应用程序所需的几乎任何事情。
对 Acegi 了解越多,使用起来就越简单。这一节介绍 Acegi 的组件;接下来您将了解该框架如何使用反转控制(IOC)和 XML 配置文件来组合组件并表示它们的依赖关系。
Acegi Security System 由四种主要类型的组件组成:过滤器、管理器、提供者和处理程序。
Acegi 的组件通过彼此之间的依赖来对企业应用程序进行保护。比如,一个身份验证处理过滤器需要一个身份验证管理器选择一个合适的身份验证提供者。这就是说您必须能够表示和管理 Acegi 组件的依赖关系。
IOC 实现通常用于管理 Java 组件之间的依赖关系。IOC 提供了两个重要的特性:
- 它提供了一种语法,表示应用程序所需的组件以及这些组件如何相互依赖。
- 它保证了所需的组件在运行时是可用的。
Acegi 使用 Spring 框架(请参见 参考资料)附带的流行开源 IOC 实现来管理其组件。Spring 需要您编写一个 XML 配置文件来表示组件的依赖关系,如清单 1 所示:
<beans> <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> value here </value> </property> </bean> <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFitler"> <property name="authenticationManager" ref="authManager"/> <!-- Other properties --> </bean> <bean id="authManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <!-- List of providers here --> </property> </bean> <!-- Other bean tags --> </beans> |
如您所见,Acegi 使用的 Spring XML 配置文件包含一个 <beans> 标记,它封装了一些其他的 <bean> 标记。所有的 Acegi 组件(即过滤器、管理器、提供者等)实际上都是 JavaBean。XML 配置文件中的每个 <bean> 标记都代表一个 Acegi 组件。
进一步解释 XML 配置文件
首先将注意到的是每个 <bean> 标记都包含一个 class 属性,这个属性标识组件所使用的类。<bean> 标记还具有一个 id 属性,它标识作为 Acegi 组件工作的实例(Java 对象)。
比方说,清单 1 的第一个 <bean> 标记标识了名为 filterChainProxy 的组件实例,它是名为 org.acegisecurity.util.FilterChainProxy 的类的实例。
使用 <bean> 标记的子标记来表示 bean 的依赖关系。比如,注意第一个 <bean> 标记的 <property> 子标记。<property> 子标记定义了 <bean> 标记依赖的其他 bean 或值。
所以在 清单 1 中,第一个 <bean> 标记的 <property> 子标记具有一个 name 属性和一个 <value> 子标记,分别定义了这个 bean 依赖的属性的名称和值。
同样,清单 1 中的第二个和第三个 <bean> 标记定义了一个过滤器 bean 依赖于一个管理器 bean。第二个 <bean> 标记表示过滤器 bean,而第三个 <bean> 标记表示管理器 bean。
过滤器的 <bean> 标记包含一个 <property> 子标记,该子标记具有两个属性:name 和 ref。name 属性定义了过滤器 bean 的属性,而 ref 属性引用了管理器 bean 的实例(名称)。
下一节将展示如何在 XML 配置文件中配置 Acegi 过滤器。在本文后面的内容中,您将在一个样例 Acegi 应用程序中使用过滤器。
正如我前面提到的一样,Acegi 使用安全过滤器为企业应用程序提供身份验证和授权服务。您可以根据应用程序的需要使用和配置不同类型的过滤器。这一节将介绍五种最重要的 Acegi 安全过滤器。
Acegi 的 Session Integration Filter(SIF)通常是您将要配置的第一个过滤器。SIF 创建了一个安全上下文对象,这是一个与安全相关的信息的占位符。其他 Acegi 过滤器将安全信息保存在安全上下文中,也会使用安全上下文中可用的安全信息。
SIF 创建安全上下文并调用过滤器链中的其他过滤器。然后其他过滤器检索安全上下文并对其进行更改。比如,Authentication Processing Filter(我将稍后进行介绍)将用户信息(如用户名、密码和电子邮件地址)存储在安全上下文中。
当所有的处理程序完成处理后,SIF 检查安全上下文是否更新。如果任何一个过滤器对安全上下文做出了更改,SIF 将把更改保存到服务器端的会话对象中。如果安全上下文中没有发现任何更改,那么 SIF 将删除它。
在 XML 配置文件中对 SIF 进行了配置,如清单 2 所示:
清单 2. 配置 SIF
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/>
|
Authentication Processing Filter
Acegi 使用 Authentication Processing Filter(APF)进行身份验证。APF 使用一个身份验证(或登录)表单,用户在其中输入用户名和密码,并触发身份验证。
APF 执行所有的后端身份验证处理任务,比如从客户机请求中提取用户名和密码,从后端用户库中读取用户参数,以及使用这些信息对用户进行身份验证。
在配置 APF 时,您必须提供如下参数:
- Authentication manager 指定了用来管理身份验证提供者的身份验证管理器。
- Filter processes URL 指定了客户在登录窗口中按下 Sign In 按钮时要访问的 URL。收到这个 URL 的请求后,Acegi 立即调用 APF。
- Default target URL 指定了成功进行身份验证和授权后呈现给用户的页面。
- Authentication failure URL 指定了身份验证失败情况下用户看到的页面。
APF 从用户的请求对象中得到用户名、密码和其他信息。它将这些信息传送给身份验证管理器。身份验证管理器使用适当的提供者从后端用户库中读取详细的用户信息(如用户名、密码、电子邮件地址和用户访问权利或特权),对用户进行身份验证,并将信息存储在一个 Authentication 对象中。
最后,APF 将 Authentication 对象保存在 SIF 之前创建的安全上下文中。存储在安全上下文中的 Authentication 对象将用于做出授权决策。
APF 的配置如清单 3 所示:
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="authenticationManager" ref="authenticationManager" /> <property name="filterProcessesUrl" value="/j_acegi_security_check" /> <property name="defaultTargetUrl" value="/protected/protected1.jsp" /> <property name="authenticationFailureUrl" value="/login.jsp?login_error=1" /> </bean> |
可以从这段代码中看到,APF 依赖于上面讨论的这四个参数。每个参数都是作为清单 3 所示的 <property> 标记配置的。
Acegi 使用一个 Logout Processing Filer(LPF)管理注销处理。当客户机发来注销请求时,将使用 LPF 进行处理。它标识了来自由客户机所调用 URL 的注销请求。
LPF 的配置如清单 4 所示:
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter"> <constructor-arg value="/logoutSuccess.jsp"/> <constructor-arg> <list> <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/> </list> </constructor-arg> </bean> |
可以看到 LPF 在其构造方法中包含两个参数:注销成功 URL(/logoutSuccess.jsp)和处理程序列表。注销成功 URL 用来在注销过程完成后重定向客户机。处理程序执行实际的注销过程;我在这里只配置了一个处理程序,因为只需一个处理程序就可以使 HTTP 会话变为无效。我将在本系列下一篇文章中讨论更多的处理程序。
待续!
发表评论
-
应用OSCache提升J2EE系统运行性能
2009-05-19 11:38 969作者简介 肖菁,软件工程师,IBM developer ... -
ExtJs 关键概念解惑
2009-05-11 09:13 1845l 面板Panel:面板是一块区域,程序员可以 ... -
jmock 单元测试
2009-05-04 11:12 1221JMock是帮助创建mock对象 ... -
基于Tomcat开发Portlet------续
2009-04-03 15:55 1699官方文档说如果使用了“80%9d\j2sdk1.4.1_07\ ... -
基于Tomcat开发Portlet
2009-04-03 15:36 33181. 文档说明 本文基于Tomcat开发Portlet的部分 ... -
xp 安装sqlserver 2000
2008-07-09 09:12 2234为了帮朋友解决在WINDOWS ... -
appfuse 2 下载
2008-05-16 10:32 8678具体步骤: 1、下载jdk,maven,mysql5.x.设 ... -
J2EE 中的安全
2008-04-07 10:09 1348本文所介绍的内容是基于j2ee1.3版本的。 j2ee中的安全 ... -
用过滤器进行权限控制实例 附源码
2008-01-15 13:44 3710用过滤器实现的简单的权限控制 没有登陆的情况下,直接访问登陆页 ... -
过滤器(filter) 例子源码
2008-01-15 09:41 2769最基本的过滤器的应用的源码. 过滤器的相关内容可以查看相关内 ... -
过滤器(filter)在web 中的应用
2008-01-14 18:12 4284过滤器(Filter)在Web开发中的应用: Filter是 ... -
servlet 相关内容 续一
2008-01-14 10:20 1555Servlet 相关内容 续一 Serlvet生命周期: S ... -
servlet 相关内容
2008-01-11 17:03 1282Servlet和Servlet容器: 我们通过浏览器访问一个网 ... -
XSL(eXtensible Stylesheet Language)------可扩展样式标语
2008-01-11 13:41 1213XSL(eXtensible Stylesheet Langu ... -
使用 Acegi 保护 Java 应用程序: 续三
2008-01-09 13:46 1088本文是 Acegi Security Syster ... -
使用 Acegi 保护 Java 应用程序: 续二
2008-01-09 10:55 1136使用 Acegi 保护 Java 应用程序: 续二 了解了 A ... -
使用 Acegi 保护 Java 应用程序: 续一
2008-01-09 10:26 1245使用 Acegi 保护 Java 应用程序: 续一 Exce ... -
使用LookupDispatchAction- -
2007-11-29 10:13 1506org.apache.stru ... -
ForwardAction、IncludeAction、SwitchAction
2007-11-29 10:12 2022发表:2005-5-26 2:37:49 出 ...
相关推荐
在“使用 Acegi 保护 Java 应用程序:续二”这篇博文中,作者可能深入探讨了如何将 Acegi 集成到 Java 应用程序中,以增强其安全性,特别是对于 Web 应用程序。下面我们将详细讨论 Acegi 的核心概念和使用方法,以及...
本篇文章是“使用 Acegi 保护 Java 应用程序”系列的续篇,旨在深入探讨 Acegi 的使用方法。在前一篇文章中,我们可能已经介绍了 Acegi 的基本概念和安装步骤。在这里,我们将更进一步,讨论如何配置和实现 Acegi 的...
总之,Acegi 是一个强大的安全框架,它提供了丰富的工具和策略来保护 Java 应用程序。通过深入学习和应用 Acegi,开发者可以创建高度安全的应用,同时保持灵活性和可扩展性。在续三部分中,可能还会涉及更多高级话题...
这份共分三部分的系列文章介绍了 Acegi 安全系统(Acegi Security System),它是用于 JavaTM 企业应用程序的强大的开源安全框架。...您介绍 Acegi 的架构和组件,并展示如何使用它来保护一个简单的 Java 企业应用程序。
Acegi是Spring框架早期的安全模块,它为Java应用程序提供了强大的身份验证和授权功能。在本文中,我们将深入探讨Acegi安全框架的核心概念、工作原理以及如何在实际项目中使用它来保护我们的Java应用。 首先,Acegi...
Spring Acegi 安全框架是基于Spring的,用于保护Web应用程序、文档以及Java应用程序的安全框架。它利用Spring的AOP(面向切面编程)和AspectJ技术,对Java方法或类进行安全控制。Acegi Security System提供了一种...
AceGI,全称为Acegi ...理解Acegi对于学习和使用Spring Security仍然大有裨益,因为它可以帮助我们更好地理解Web应用程序的安全设计和实现。在实际开发中,掌握Acegi的相关知识可以提升我们构建安全系统的专业能力。
而Acegi Security是Spring社区早期的一个安全模块,它提供了全面的身份验证、授权和会话管理功能,为基于Spring的应用程序提供了强大的安全性支持。本实战教程将深入探讨如何将Acegi Security集成到Spring框架中,...
Appfuse是一个开源项目,旨在简化Web应用程序的开发过程,它提供了一种基础架构,开发者可以在此基础上快速构建基于MVC模式的应用。Appfuse2版本中集成了Acegi Security,使得权限管理变得更加简单。通过Appfuse,...
Spring Security(原名Acegi Security)是一个强大的框架,用于保护基于Spring的应用程序。它提供了身份验证、授权、会话管理以及安全性方面的控制。通过使用Acegi或Spring Security,开发者可以轻松地实现如登录、...
总的来说,Acegi 提供了一个强大且灵活的框架,使 Java 开发者能够安全地构建应用程序,通过与 Spring 的紧密集成,使得配置和管理变得更加简单。无论是处理简单的认证还是复杂的授权需求,Acegi 都能提供一套完整的...
Acegi Security是Spring框架早期的一个安全模块,它提供了全面的身份验证和授权服务,用于构建企业级的Java应用程序。这个“acegi保护业务方法_basedMemory”主题可能是关于如何使用Acegi Security来保护应用程序中...
Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...
acegi是Spring的一个安全模块,主要用于处理应用程序的认证和授权。通过集成ehCache,acegi能够更有效地管理用户的登录状态和访问权限,提高系统的响应速度。以下将详细介绍ehCache如何与acegi协同工作,并提供一些...