Spring Security介绍

 

Spring Security介绍

Spring Security是一种为基于Spring的应用程序提供说明性安全保护的安全框架。它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权。在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术。

1 Spring Security的发展

在过去,Spring Security也被称为Acegi Security(或者简称为Acegi)。Acegi长期以来一直是Spring的一个子项目。但是在本书作者写到这儿时,正有计划准备将Acegi更加紧密地置于Spring项目伞之下。做为该行动的一部分,将不再使用Acegi这个名称,而改用“Spring Security”。按照计划,这一更改将在Acegi/Spring Security的1.1.0版本中开始实施。由于知道这一更改即将实施,因此本书作者决定先行一步,开始将Acegi称为Spring Security,不过读者还会在本章中看到一些该名称。

在保护Web应用程序时,Spring Security使用Servlet过滤器来拦截Servlet请求,以实施身份认证和执行安全措施。并且,在第7.4.1节你将会看到,Spring Security采取了一种独特的机制来声明Servlet过滤器,使你可以使用Spring DI注入它所依赖的其他对象。

Spring Security还可以通过保护方法调用在一个较低层的级别上执行安全措施。在保护方法时,Spring Security使用Spring AOP来代理对象,将“切面”应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。

在研究Spring Security安全机制的本质之前,首先让我们居高临下地考察一下Spring Security以及每一个组件在保护应用程序中所扮演的角色。

1.1 安全拦截器

工作了一整天,当你回到家时,需要打开家门上的锁。而为了打开那个锁,你必须先将一把钥匙插到锁孔中,并恰当地拨动锁的制动栓,以打开弹簧锁。如果钥匙和锁不匹配,就无法拨动制动栓,而弹簧锁也就不会被打开。但是如果你有正确的钥匙,那么所有的制动栓就都会接受这把钥匙,弹簧锁就会被打开,从而允许你把门打开。

在Spring Security中,安全拦截器可以被看作是一把弹簧锁,能够阻止对应用程序中受保护资源的访问。为了弹开弹簧锁,从而通过安全拦截器,你必须向系统提供“钥匙”(通常是一对用户名和密码)。该“钥匙”接着会尝试拨开安全拦截器的“制动栓”,从而允许你访问受保护的资源。

安全拦截器的实际实施将取决于所要保护的资源。如果读者正要在某个Web应用程序中保护一个URL,那么相应的安全拦截器将被当做一个servlet过滤器来实施。但是如果你正要保护某个方法调用,那么切面将被用来加强安全性。读者将会在本章稍后部分看到安全拦截器的这两种形式。

除了通过拦截对资源的访问来加强安全性之外,安全拦截器几乎无所事事。它并不实际应用安全规则。相反,它把该职责委托给图7.1底部所示的各种管理器。下面让我们从认证管理器开始,逐个看一下这些管理器。

1.2 认证管理器

第一道必须打开的安全拦截器的制动栓就是认证管理器。认证管理器负责辨认你是谁。它是通过考虑你的主体(通常是一个用户名)和你的凭证(通常是一个密码)做到这点的。

你的主体定义了你是谁,而你的凭证则是确认你身份的证据。如果你的凭证足以使认证管理器相信你的主体可以标识你的身份,那么Spring Security就能知道它是在和谁打交道了。

如同Spring Security的其余部分(以及Spring本身)一样,认证管理器也是一个基于接口的可插入组件。这使得它有可能与几乎所有你能想象到的认证机制一起使用Spring Security。在本章稍后你将看到,Spring Security带有少数灵活的认证管理器,它们包括绝大多数常见的认证策略。

1.3 访问决策管理器

一旦Spring Security确定了你是谁,它就必须决定你是否对受保护的资源拥有访问授权。访问决策管理器是Spring Security锁中第二道必须被打开的制动栓。访问决策管理器执行授权,它考虑你的身份认证信息和与受保护资源关联的安全属性来决定是否让你进入。

举例来说,安全规则也许规定只有主管才允许访问某个受保护的资源。而如果你被授予了主管权限,那么第二道也是最后一道制动栓——访问决策管理器——就会被打开,并且安全拦截器将会给你让路,让你取得对受保护资源的访问权。

就像认证管理器一样,访问决策管理器也是可插入的。在本章稍后部分,我们将更进一步研究Spring Security所带的访问决策管理器。

1.4 运行身份管理器

如果你已经通过了认证管理器和访问决策管理器,那么安全拦截器就会被开启,门也就可以被打开了。但是在你转动门把手进去之前,安全拦截器可能还有一件事要做。

即使你已经通过身份认证并且已经获得了访问某一资源的授权,门后也许还有更多的安全限制在等着你。举例来说,你也许已被授权查看某一Web页面,但是用于创建该页面的对象可能有着与这一Web页面本身不同的安全要求。运行身份管理器可以用来使用另一个身份替换你的身份,从而允许你访问应用程序内部更深处的受保护对象。

注意,并不是所有应用程序都会需要身份替换。因此,运行身份管理器是一个可选的安全组件,在许多受Spring Security保护的应用程序中并不需要运行身份管理器。

1.5 调用后管理器

Spring Security的调用后管理器与其他安全管理器组件略有不同。其他安全管理器组件在受保护资源被访问之前实施某种形式的安全措施强制执行,而调用后管理器则是在受保护资源被访问之后执行安全措施。

调用后管理器有点类似于在某些折扣商店和家用电器商店出口处等着检查购物小票的人。他们这样做的目的是确保你拥有从商店里搬走那些值钱物品的适当权利。不过,调用后管理器是确保你被允许查看那些受保护资源返回的数据,而不是确保你被允许从商店搬走大屏幕电视。

如果调用后管理器建议一个服务层Bean,那么它便将有机会检查从所建议方法返回的值。接下来,它可以决定当前用户是否被允许查看返回的对象。该调用后管理器还可以修改所返回的值,以确保当前用户只能够访问返回对象的特定属性。

与运行身份管理器类似,并不是所有应用程序都会需要调用后管理器。你只会在你的应用程序的安全方案要求访问被限制在每个实例基础上的定义域水平时需要调用后管理器。

现在,你已经看到了Spring Security的全貌,我们就可以为RoadRantz应用程序配置Spring Security了。对我们来说,我们将不需要运行身份管理器或调用后管理器,因此我们将把那两个组件放到后面的高级Spring Security主题中。下面,让我们首先从配置认证管理器开始。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值