Acegi在电子商务系统中的应用

2008-12-29 00:00:00陈红丽吕善国
中国市场 2008年41期


  摘要:本文分析了Acegi安全框架,详细说明了Acegi安全框架的工作过程。举例说明了Acegi安全框架的具体应用,讨论了如何利用Acegi进行Web资源的认证和授权。使用一种基于数据库的策略来对Acegi资源配置进行动态扩展,满足电子商务系统中用户在运行期间的动态改变权限的需求。
  关键词:认证;授权;安全框架;电子商务
  中图分类号:TP393.08 文献标识码:A 文章编号:1005-6432(2008)41-0028-02
  
  电子商务是一种全新的企业经营模式,由于其网络传输信息的特殊性,所以安全问题显得十分重要。在电子商务系统中,由于业务需求面临着不断的变化,安全逻辑应该与应用业务逻辑代码相分离,采用Acegi安全框架只要在配置文件中定义即可,真正做到了安全逻辑与业务逻辑的分离,很好地满足了电子商务应用程序安全的需求。
  
  一、Acegi安全框架
  
  Acegi是一个基于Spring Framework的安全框架。 Acegi安全系统由过滤器、管理器、提供者和处理程序四种主要类型的组件组成。过滤器提供了常见的安全服务,如身份验证、会话处理以及注销。管理器管理是由不同提供者提供的较低级的安全服务。提供者可用于和不同类型的数据存储服务通信,Acegi的管理器将在运行时选择合适的提供者。有时任务可能会被分解为多个步骤,每个步骤由一个特定的处理程序执行,可以使用自己选择的处理程序来执行保护应用程序所需的步骤。
  Acegi安全系统的安全拦截器包含三个管理类: Authentication Manager(认证管理器)用于管理Authentication Provider(认证提供者)来对用户进行认证。认证管理器依次调用认证提供者的认证方法,直到认证通过。Access Decision Manager(访问决策管理器)用于授权一个特定的操作,先通过Authentication Manager判断用户是否通过认证,再根据Object Definition Source的配置信息调用Access Decision Manager,根据Role Voter的“投票”评估决定用户是否有权访问某资源。此外还借助于安全拦截器实现了对受保护资源的授限访问。Run as Manager当执行特定的操作时,用于选择性地替换Authentication对象。
  
  二、Acegi的工作流程
  
  当客户机向应用程序发送HTTP请求时,其工作流程如图1所示。
  
  (1)客户机向应用程序发送HTTP请求。
  (2)容器接收到HTTP请求创建一个请求对象和一个响应对象,然后调用Acegi的过滤器链代理。当容器调用代理时,它将向代理发送请求、响应以及过滤器链对象。
  (3)代理过滤器调用过滤器链中第一个过滤器,向其发送请求、响应和过滤器链对象。
  (4)链中的过滤器逐个执行其处理。一个过滤器可以通过调用过滤器链中下一个过滤器随时终止自身处理。
  (5)当身份验证过滤器完成其处理时,这些过滤器将把请求和响应对象发送到应用程序中配置的拦截过滤 器。
  (6)拦截器决定是否对发出请求的客户机进行授权,使它访问所请求的资源。
  (7)如果授权检查通过,拦截器将控制权传输给应用程序,否则拒绝。
  (8)应用程序改写响应对象的内容。
  (9)响应对象已经准备好了,容器将响应对象转换为HTTP响应发送到发出请求的客户机。
  
  三、Acegi具体应用
  
  了解了Acegi的工作流程后,在电子商务系统中的应用重点是过滤器和拦截器的配置。Authentication ProcessingFilter 配置如下:
  <bean id="authenticationProcessing Filter"class
  ="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
  <property name="authenticationManager">
  <ref local="authenticationManager"/>
  </property>
  <property name="filterProcessesUrl" value="/j_acegi_security_check"/>
  <property name="defaultTargetUrl'value="/index.jsp"/>
  <property name="authenticationFailureUrl"value="/login.jsp?login_error=1"/></bean>
  安全拦截器收到客户端请求后,决定是否对其进行授权。由于在运行期间用户可能会提出动态改变权限分配的需求,使用基于数据库的策略读出相关的安全配置参数。首先实现一个Property Editor(例如Customer Editor Configure)来覆盖默认的实现。自定义一个资源定义接口包含核心方法(Get Filter Invocation Definition Source),提供资源和角色的配置,用数据库中的数据重新组装Filter Invocation Definition Source。将Filter Invocation Definition Source Cache中的Filter Invocation Definition Source传递给Filter Invocation Interceptor。
  配置如下:
  <bean id="filterlnvocationInterceptor"class="net.sf.acegisecurity.intercept.web. FilterSecuritylnterceptor">
  <property name="authenticationManager">
  <ref local="authenticationManager"/>
  </property>
  <property name="accessDecisionManager"> <ref local="accessDecisionManager"/>
  </property>
  <property name="objectDefinifionSource">
  <ref local="FilterInvocationDefinitionSourceCache"/>
  </property></bean>
  <bean id="customEditorConfigurer"class="org.springframework.beans.factory. config.CustomEditorConfigurer">
  <property name="customEditors">
  <map><entry key="org.acegisecurity.intercept.web.FilterlnvocationDefintionSource">
  <bean id="filterInvocationDefinitionSourceDaoExtentionEditor" Class="com.skyon.um.se- curity.acegi. intercept.web.FilterlnvocationDefinitionSourceDynamicExtentionEditor"></bean></entry></map></property></bean>
  与认证授权相关的数据库设计如图2所示。
  
  
   四、结束语
  
  Acegi安全框架真正实现了安全代码从业务代码中的分离,系统结构更合理。在电子商务系统中,通过使用数据库策略对Acegi资源配置动态扩展完成认证与授权,很好地解决了电子商务系统中应用程序的安全性需求。
  作者单位:华东交通大学
  
  参考文献:
  路鹏,殷兆麟.基于Spring的Acegi安全框架认证与授权的分析及扩展[J].计算机工程