您的位置:首页 > 编程语言 > Java开发

Spring Security介绍

2016-01-13 16:29 351 查看
这里提到的Spring Security也就是被大家广为熟悉的Acegi Security,2007年底AcegiSecurity正式成为Spring Portfolio项目,并更名为Spring Security.SpringSecurity是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了SpringIoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
通过在许多项目中实践应用以及社区的贡献,如今的Spring Security已经成为Spring Framework下最成熟的安全系统,它为我们提供了强大而灵活的企业级安全服务,如:
Ø 认证授权机制
Ø Web资源访问控制
Ø 业务方法调用访问控制
Ø 领域对象访问控制Access Control List(ACL)
Ø 单点登录(Central Authentication Service)
Ø X509认证
Ø 信道安全(Channel Security)管理等功能
当保护Web资源时,Spring Security使用Servlet 过滤器来拦截Http请求进行身份验证并强制安全性,以确保WEB资源被安全的访问。如下图是Spring Security的主要组件图(摘自《Spring in Action》):



图1 Spring Security的基本组件
无论是保护WEB资源还是保护业务方法或者领域对象,SpringSecurity都的通过上图中的组件来完成的。本文主要阐述如何使用SpringSecurity对WEB应用程序的资源进行安全访问控制,并通过一个简单的实例来对SpringSecurity提供的各种过滤器的功能和配置方法进行描述。

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

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 运行身份管理器
3ff0

如果你已经通过了认证管理器和访问决策管理器,那么安全拦截器就会被开启,门也就可以被打开了。但是在你转动门把手进去之前,安全拦截器可能还有一件事要做。
即使你已经通过身份认证并且已经获得了访问某一资源的授权,门后也许还有更多的安全限制在等着你。举例来说,你也许已被授权查看某一Web页面,但是用于创建该页面的对象可能有着与这一Web页面本身不同的安全要求。运行身份管理器可以用来使用另一个身份替换你的身份,从而允许你访问应用程序内部更深处的受保护对象。
注意,并不是所有应用程序都会需要身份替换。因此,运行身份管理器是一个可选的安全组件,在许多受Spring Security保护的应用程序中并不需要运行身份管理器。

1.5 调用后管理器

Spring Security的调用后管理器与其他安全管理器组件略有不同。其他安全管理器组件在受保护资源被访问之前实施某种形式的安全措施强制执行,而调用后管理器则是在受保护资源被访问之后执行安全措施。
调用后管理器有点类似于在某些折扣商店和家用电器商店出口处等着检查购物收据的人。他们这样做的目的是确保你拥有从商店里搬走那些值钱物品的适当权利。不过,调用后管理器是确保你被允许查看那些受保护资源返回的数据,而不是确保你被允许从商店搬走大屏幕电视。
如果调用后管理器建议一个服务层Bean,那么它便将有机会检查从所建议方法返回的值。接下来,它可以决定当前用户是否被允许查看返回的对象。该调用后管理器还可以修改所返回的值,以确保当前用户只能够访问返回对象的特定属性。
与运行身份管理器类似,并不是所有应用程序都会需要调用后管理器。你只会在你的应用程序的安全方案要求访问被限制在每个实例基础上的定义域水平时需要调用后管理器。
现在,你已经看到了Spring Security的全貌,我们就可以为RoadRantz应用程序配置Spring Security了。对我们来说,我们将不需要运行身份管理器或调用后管理器,因此我们将把那两个组件放到后面的高级Spring Security主题中。下面,让我们首先从配置认证管理器开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: