服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java新手学堂:acegi框架技术详细介绍

对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的。acegi security(以下简称acegi)是一个能为基于spring的企业应用提供强大而灵活安全访问控制解决方案的框架,acegi已经成为spring官方的一个子项目,所以也称为spring security。它通过在spring容器中配置一组bean,充分利用spring的ioc和aop功能,提供声明式安全访问控制的功能。虽然,现在acegi也可以应用到非spring的应用程序中,但在spring中使用acegi是最自然的方式。

acegi可以实现业务对象方法级的安全访问控制粒度,它提供了以下三方面的应用程序的安全:

url资源的访问控制

如所有用户(包括其名用户)可以访问index.jsp登录页面,而只有授权的用户可以访问/user/adduser.jsp页面。acegi允许通过正则表达式或ant风格的路径表达式定义url模式,让授权用户访问某一url匹配模式下的对应url资源。

业务类方法的访问控制

spring容器中所有bean的方法都可以被acegi管理,如所有用户可以调用bbtforum#getrefinedtopiccount()方法,而只有授权用户可以调用bbtforum#addtopic()方法。

领域对象的访问控制

业务类方法代表一个具体的业务操作,比如更改、删除、审批等,业务类方法访问控制解决了用户是否有调用某种操作的权限,但并未对操作的客体(领域对象)进行控制。对于我们的论坛应用来说,用户可以调用bbtforum#updateuser(user user)方法更改用户注册信息,但应该仅限于更改自己的用户信息,也即调用bbtforum#updateuser()所操作的user这个领域对象必须是受限的。

acegi通过多个不同用途的servlet过滤器对url资源进行保护,在请求受保护的url资源前,acegi的servlet过滤器判断用户是否有权访问目标资源,授权者被开放访问,而未未被授权者将被阻挡在大门之外。

acegi通过spring aop对容器中bean的受控方法进行拦截,当用户的请求引发调用bean的受控方法时,acegi的方法拦截器开始工作,阻止未授权者的调用。

对领域对象的访问控制建立在对bean方法保护的基础上,在最终开放目标bean方法的执行前,acegi将检查用户的acl(aeccess control list:访问控制列表)是否包含正要进行操作的领域对象,只有领域对象被授权时,用户才可以使用bean方法对领域对象进行处理。此外,acegi还可以对bean方法返回的结果进行过滤,将一些不在当前用户访问权限范围内的领域对象剔除掉――即传统的数据可视域范围的控制。一般来说,使用acegi控制数据可视域未非理想的选择,相反通过传统的动态sql的解决方案往往更加简单易行。

从本质特性上来说,servlet过滤器就是最原始的原生态aop,所以我们可以说acegi不但对业务类方法、领域对象访问控制采用了aop技术方案,对url资源的访问控制也使用了aop的技术方案。使用aop技术方案的框架是令人振奋的,这意味着,开发者可以在应用程序业务功能开发完毕后,轻松地通过acegi给应用程序穿上安全保护的“铁布衫”。

扫描关注微信公众号