第21卷第4期 2008年l2月 青岛私甚技术净 学报 J ournal of Qingdao Technical College Vo1.21 NO.4 Dec.2008 J ava Web应用安全框架ACEGI浅释 孟宪宁 (青岛职业技术学院信息学院,山东青岛266555) 摘要:对于任何一个完整的应用系统来讲,完善的认证和授权机制是必不可少的。开源的ACEGI为企业 级应用中通常会遇到的安全问题提供了很好的解决方案,为使用Spring框架的应用程序提供了丰富的安全服 务。在Spring框架下采用ACEGI,可以充分利用Spring框架提供的依赖注入(Dependence Injection)技术,在 Web配置文件中完成应用程序的安全配置和管理,具有很高的灵活性 本文在分析了ACEGI架构模型、 ACEGI提供的安全过滤器机制,介绍了把ACEGI提供的不同过滤器组合到Spring框架Web应用中的方法 和步骤的同时,提出了一种解决Java web应用程序安全问题的思路和方法。 关键词:ACEGI;安全;Web应用 中图分类号:TP3l9文献标识码:A 文章编号:1672—2698(2008)04—0048—04 现在越来越多的基于Web的企业应用构建在 J2EE平台上,对于一个企业级的应用来说,安全认证 和授权机制是必不可少的,J2EE提供的基于角色的 授权机制通过使用声明和编程技术,给编程人员提供 了比较大的便利.但如果在开发过程中,用户自己写 代码来解决这些相关的问题,不仅代码量巨大,而且 实际的应用效果并不理想。ACEGI是一个开源的安 全框架.它为基于Spring的应用提供了很好的安全 Web应用的安全问题主要是验证用户身份(Au— thentication)、授权合法用户访问不同的应用程序功 能及相关数据(Authorization)。验证用户解决的是 “用户是谁(Who are you?)”的问题,对于Web应用 来说,这一步可以使用用户名和密码机制来解决。授 权问题解决的是“可以做什么(What may you do?)” 的问题,Web应用一般是通过把用户要请求(Re— quest)的资源授权给某个角色(Role)来解决该问题 的。对于某个已经通过验证的用户来说,如果他属于 某个角色,则他就能访问该角色所被授权访问的资 源。安全模式下的web应用访问流程如下图所示: 解决方案 。通过使用Spring的依赖注入机制,在 Spring应用上下文环境中,配置ACEGI有关的Bean 来实现一个安全的Web应用。 Web应用程序的安全机制有两种组件:认证和 授权. 于J2EE的Web容器提供了基于表单的认 证机制.在实际的开发过程中,应用程序的设计人员 和开发人员需要解决基于表单的认证如何与数据库 或者IA)AI 等其他领域的安全机制协同工作,以及 如何在web应用程序的部署描述文件(web.xm1)中 t I是 增加或删除授权角色等问题。ACEGI使用的是 Servlet过滤机制来完成相关的认证和授权工作。在 采用轻量级框架Spring进行Web应用的开发过程 中.可以灵活地对ACEGI进行配置,使用关系数据 库或者I DAP来完成安全认证,使用ACEGI来解决 有关的安全问题是一个不错的选择。 < >三 显示错误页 Http403错误 (登录失败) 访问资 限吗? 显示错误页 Http5031 ̄误 (未被授权) 图1安全的Web应用访问流程图 收稿日期:2008—07—09 作者简介:孟宪宁(1971-),男,山东莱阳人,工程师,硕士。 眚鸟职甚技术净阮学报 2008年第4期 图1所展示的安全访问流程包括三个方面的检 查。其一,性的访问检查(Restricted Access Check):检查所访问的资源是否是被保护的;其二, 检查是否已经通过验证(Authentication Check):检 查执行请求的用户是否已经通过了验证;其三,检查 用户是否具备授权(Authorization Check):检查执行 请求的用户是否属于具备资源访问权的角色。 一般的Web应用安全性检查是通过在资企业资 源定位符(Locator)或者网络地址(Network Ad— dress)来实现安全控制,这种模式称为URL安全性 (Universal Resource Locator Security)。本文介绍 的就是ACEGI为实现URL安全性所提供的全面特 性的实现方法。 二、ACEGI安全系统的组件和过滤器 (一)ACEGI的组件构成 ACEGI主要有四种类型的组件组成:过滤器 (filter)、管理器(Manager)、提供者(Provider)和处理 程序(handler)。L2] 1.过滤器:ACEGI提供了多种不同类型的过滤 器,这些过滤器提供了常见的安全服务,如身份验证、 注销等安全服务都可通过配置这些过滤器来实现 2.管理器:具体的身份验证及登陆和注销处理是 由管理器来实现的,管理器通过调用不同的提供者来 完成具体的安全服务。 3.提供者:提供者主要是和不同类型的数据存储 服务通信,如目录服务、关系数据库或者简单的内存 对象等,借助不同的数据存储服务来实现用户库和访 问控制的存储 4.处理程序:安全控制中的不同任务是由处理程 序具体来完成的,ACEGI提供的不同处理程序可以 灵活搭配,以满足不同的处理要求。 这些组件当中的基础对象是安全上下文占位符 (Security Context Holder),这个对象存储了当前应 用的安全上下文环境(Security Context)的信息,如 用户名、登录密码和角色等,Security Context Holder 隐含实现了Thread Local来存储这些细节信息。在 具体的应用中可以通过如下代码来访问Authentica— tion对象获取有关的信息: Object obj—Security Context Holder.get Con— text().get Authentication().get Principal(); if(obj instanceof UserDetails){ String username一((UserDetails)obj). getUsername(); }else{ String username===obj.toString(); > (二)ACEGI所用的安全过滤器 ACEGI通过使用安全过滤器(filter)来提供确保 企业应用程序安全所需要的身份验证和授权服务,在 实际的安全应用中,常用的安全过滤器主要有以下几 种: 1.会话结合过滤器(Session Integeration Filter SIF):SIF通常是需要配置的第一个过滤器,SIF主 要是创建一个安全上下文对象(Security Context Object),该对象存储有关的安全信息。由SIF调用 过滤器链(Filter Chain)上的其他的过滤器完成安全 认证和授权检查工作。安全上下文占位符在过滤器 链的传递过程如图2所示: 图2 Security Context Holder传递过程图 2.认证处理过滤器(Authentication Processing Filter APF):APF通过使用一个身份验证(如用户登 陆表单)进行用户身份验证,具体的后端身份验证过 程由APF来实现,如从客户端读取用户名和密码、从 后端数据库中读取用户参数等。配置APF时需要提 供如下参数: (1)认证管理器(Authentication Manager):指定 管理身份验证提供者的管理器。 (2)过滤处理URL(Filter Processes URL):指 定用户按下登陆按钮时要访问的URL,该URL通常 是过滤器链代理所指定的Bean。 (3)默认的目标URL(Default target URL):用 户通过验证和授权后所显示的URL地址。 (4)认证失败的URL(Authentication failure URL):身份验证失败时显示的页面。 3.注销处理过滤器(Logout Processing Filter LPF):该过滤器主要完成注销处理,例如删除所保存 的安全上下文环境的服务器端对象。该过滤器的配 置比较简单,只需指定一个注销后显示的页面和完成 具体注销过程的Bean即可。 4.例外平移过滤器(Exception Translation Fil~ ter):该过滤器通常用于处理用户身份验证和授权过 49 2008年第4期 眚鸟职甚技术净 学报 完成用户的认证过程,例如完成用户名和密码的校验 等。 (三)配置会话结合过滤器(HttpSessionContex— tIntegrationFilter) 程中的异常,通常情况下,用户身份验证失败异常处 理,把用户登陆页面显示出来就可,而授权验证失败, 则显示一个用户无权访问的页面。 5.拦截过滤器(Interceptor Filters):拦截过滤器 通常是在用户身份验证通过后,来完成用户授权检 查。该用于实现根据用户程序的访问策略作 出不同的授权决定。比较简单的访问策略控制包含 一这个过滤器的配置非常简单,其结果就是生成一 个认证对象(Authentication Object),然后把该对象 传递给过滤器链的下一个过滤器。 (四)配置例外平移过滤器(ExeeptionTransla— tionFilter) 下两个步骤: (1)编写访问控制策略:即设定不同角色对不同 资源的访问控制。 (2)根据设定的访问控制策略配置ACEGI的拦 截过滤器。 ACEGI提供了非常丰富的组件和过滤器,在具 体的使用过程中,可以借助Spring框架提供的IoC (反转控制)机制对ACEGI进行灵活的配置,满足应 用的不同安全需要。web应用中常用的过滤器链组 成如图3所示: 图3过滤器链 三、基于URI 的ACEGI安全配置 利用Spring框架提供的依赖注入机制,可以很 方便地把ACEGI提供的组件和过滤器结合在一起, 灵活地构建一个满足实际需要的安全Web应用。在 实际的配置过程中,要注意不同组件和过滤器的配置 顺序。下面给出一个使用ACEGI构建一个基于 URI (表单)的内存模式安全应用的具体配置过程。 (一)配置过滤器链(Filter Chain) 过滤器链的配置主要是解决当前应用程序中所 使用的安全组件和有关的过滤器。 (二)配置认证过滤器(Authentication Process— ing Filter) HTTP请求首先要传给认证过滤器,该过滤器 5O ExceptionTranslationFi1ter主要是捕获认证和 授权验证过程中的异常,通常是处理如下两种类型的 异常: 1.认证异常(Authentication Object):例如用户 未登陆。这种情况下,该过滤器会生成一个Authen— ticationEntryPoint对象。可以通过配置Authentica— tionEntryPoint对象,将用户请求转向登陆页面。 2.授权异常:用户已登录,但是没有所请求对象 的授权。可以配置例外处理过滤器将用户请求转向 访问异常页面。 (五)配置拦截过滤器FilterSecurityInterceptor 拦截过滤器配置主要是定义所使用的认证管理 器(Authentication Manager)和授权管理器(Author— ization Manager),该对象的Obj ectDefinitionSource 属性用来定义那个角色可以访问什么类型的受保护 资源。 (六)认证管理器配置(Authentication Manager) 认证管理器设置用户身份验证的方式,是采用 LDAP、内存方式的用户对象管理,还是采用关系数 据库来存储用户对象和角色信息都是在该对象的相 关属性配置中实现的。 四、通过JDBC使用认证数据库 实际的应用当中,很少有采用内存模式的用户角 色管理的,可以采用的策略是把用户身份及角色管理 放在单独的数据表中,要采用基于JDBC访问数据表 的方式来实现ACEGI的用户认证并不复杂,只需要 把DaoAuthenticationProvider 对象的 UserDe— tailsService属性配置为使用JdbcDaolmple方式来实 现即可。配置的基本步骤如下: (一)配置JDBC的数据库连接参数 设定用户登录信息、角色信息所在数据库的驱动 程序、访问URL地址、登陆数据库的用户名和密码 等,该配置和一般的Spring中dataSource的配置别 无二致。 (二)创建用户信息表(USERS)和授权表(AU— TH()RITIES) 青磊取甚技术净 学报 这两个表的结构既 可以自己定义,也可以采用 ACEGI规定的表结构, 比较简单的方式就是采用 ACEGI规定的表结构: USERS AUTHoRITIES 2008年第4期 参考文献: [1]Bilal Sidigui.Securing Java applications with ACEGI。Part 1 E EB/OL].Architectural over— view and security filters,2007.http: f gil/index.htm1. USERNAME(pk)(VARCHAR) PASSWORD fVARCHAR、 ENABLED(BOOLEAN USERNAME(pk,lk)(VARCHAR) AUTHORlTY(VARCHAR) . ibm.eom/developerworks/java/library/j—ace— 图4 JDBC方式数据表结构 USERS表中的ENABLED字段可以设置为 E2]Barton van Riel,Spring ACEGI Tutorial EEB/ OL] http f 。tfo—eservices.eu/wb—tuto— rials/pages/spring—acegi—tutoria1.php. ’varchar类型,但是其取值只能为true和false两种。 AUTHORITIES表中的AUTHORITY字段的取值 为USERNAME用户的角色名。 The Analysis of Java Web Application Security Framework ACEGI MENG Xian-ning (Information School,Qingdao Technical College,Qingdao,Shandong 266555) Abstract:The authentication and authorization is necessary for an application system.The ACEGI pro— j ect of Open Source provides a perfect solution to the security problem in the enterprise application,and it al— so provides rich security service for the application developed on the Spring framework.Under the Spring framework,the configuration and management of the application may be achieved by using the dependence injection provided by Spring framework.This article introduces the components and filter mechanism of the ACEGI。and also puts forward the methods and steps about how to combine the different filter and compo— nents of the ACEGI.This article is useful to solve the security problem on the web application development based on Java. Key words:ACEGI;security;Web application (责任编辑(上接第4O页) 李金梅) Curriculum Design on Working Process Systematization and Its Teaching Practice JIN Long—guo (Haier School,Qingdao Technical College,Qingdao,Shandong 266555) Abstract:German vocationcal education requires clearly in the curriculum guide of new”Learning field” that the curriculum of”learning field”is the curriculum of working process systematization。while the work process guide is the base of the curriculum plan of”learning field”.So the action—guided teaching process de— sign based on the work process must lay great emphasis on setting work situation in vocational education and vocational training to make clear that the object of vocational education is work process guide and the purpose is to make vocational education adapt to the needs of technology process in industrial development and also the needs of technology innovacation and mechanism reform.This thesis is the brief introduction and analysis of the teaching process design based on work process and it puts forward a concrete curriculum design in the learning field. Key words:work process;action guided;learning field;learning situation;vocational education (责任编辑李金梅) 5】