`

Spring Security介绍(1)

阅读更多

 

你是否注意到在电视连续剧中大多数人是不锁门的?这是司空见惯的。在情景喜剧《宋飞正传》(Seinfeld)中,克雷默常常到杰丽的房间里从冰箱 中拿东西吃。在《老友经》(Friends)中,各种各样的剧中人经常不敲门就不加思索地进入别人的房间。甚至有一次在伦敦,罗斯突然进入钱德勒的旅馆房 间,差点儿撞见钱德勒和罗斯的妹妹的私情。

在《反斗小宝贝》(Leave It to Beaver)热播的年代,并不值得为人们不锁门这一现象而大惊小怪。但是在如今这个隐私和安全极受重视的时代,看到电视剧中的角色允许他人大摇大摆地进入自己的公寓房间或家中,实在让人难以想像。

现实令人沮丧,有许多卑劣的人正在四处伺机偷走我们的金钱、财产、车辆和其他贵重物品。而随着信息逐渐成为我们所拥有的最有价值的东西时,窃贼们偷偷进入无保护的应用程序设法来偷取我们的数据和身份信息,也就不足为奇。

做为软件开发人员,我们必须采取措施来保护我们应用程序中的那些信息。无论你是通过用户名/密码来保护一个电子邮件账号,还是基于交易个人身份号码来保护一个经纪账户,安全性都是绝大多数应用程序的一个重要切面。

本书作者是有意选择“切面”这个词来描述应用程序的安全性。安全性是超越应用程序功能特性的一个关注点。通常来说,应用程序不应该亲自参与到对自己 的保护中。尽管你可以把与安全相关的处理直接编码到应用程序中(这种情况并不少见),但是更好的做法还是将安全考虑与应用考虑分开。

听上去好像安全性是通过“面向切面”技术实现的,其实还是如此。在本章中,我们将研究利用切面保护应用程序的方法。不过,我们不必自己开发那些切面——我们将着眼于Spring Security,这是一种基于Spring AOP和Servlet过滤器 的安全框架。

 

7.1  Spring Security介绍

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

 

7.1.1 名称中有什么

在过去,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来代理对象,将“切面”应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。

无论你是只在Web请求级需要安全措施,还是需要较低层的方法安全措施,Spring Security都是使用如图7.1所示的5个主要组件来实施安全措施的。

(点击查看大图)图7.1 Spring Security的基本要素


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

 

 

7.1.1.1 安全拦截器

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

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

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

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

 

 

7.1.1.2 认证管理器

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

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

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

 

 

7.1.1.3 访问决策管理器

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

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

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

 

 

7.1.1.4 运行身份管理器

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

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

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

 

 

7.1.1.5 调用后管理器

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

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

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

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

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

 

 

 

 

分享到:
评论

相关推荐

    Spring Security in Action

    Spring Security 实践指南 Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户...

    Spring Security 资料合集

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...

    SpringSecurity.pdf

    Spring Security是一个功能强大、高度定制的安全框架,它专门用于为基于Spring的应用程序提供安全性解决方案。Spring Security架构的设计初衷是为了解决认证和授权的需求,确保应用程序的安全性。它提供了全面的安全...

    SpringSecurity笔记,编程不良人笔记

    1. **SpringSecurity核心概念** - **Filter Chain**: SpringSecurity通过一系列过滤器实现其安全功能,这些过滤器构成了Filter Chain。每个过滤器负责特定的安全任务,如认证、授权等。 - **Authentication**: ...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    spring security 完整项目实例

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中,我们将深入探讨Spring Security的核心概念以及如何将其应用于实际的Web应用程序开发。 首先,我们从用户、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在压缩包文件`spring_gateway_security_webflux`中,可能包含了示例代码或配置文件,用于演示如何在Spring Cloud Gateway中集成Spring Security,实现统一登录认证鉴权。这些资源可以帮助开发者更快地理解和实践上述...

    SpringSecurity学习总结源代码

    1. **Filter Security Interceptor**:这是SpringSecurity的主要过滤器,负责检查请求并决定是否允许访问。它会根据预定义的访问控制规则进行判断。 2. **Authentication Manager**:处理用户认证的组件,可以使用...

    spring spring security2.5 jar

    1. **依赖管理**:确保Spring Security的jar包与Spring Framework的版本兼容。在项目中正确引入这些jar包,通常通过Maven或Gradle的依赖管理来实现。 2. **配置文件**:在Spring的XML配置文件中,需要添加Spring ...

    spring security3 中文版本

    ### Spring Security 3.0.1 中文版知识点解析...通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这有助于开发者更好地利用 Spring Security 为应用程序构建强大的安全防护。

    spring security 官方文档

    1. **身份验证(Authentication)**:Spring Security 提供了一套完整的身份验证机制,支持多种认证方式,如用户名/密码、数字证书、HTTP基本认证等。它可以通过自定义`AuthenticationProvider`来扩展,以适应不同的...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 知识点1:SpringBoot+SpringSecurity框架简介 ...

    spring security 4.0.0所需jar包

    1. **spring-security-core**: - `spring-security-core-4.0.0.CI-SNAPSHOT-javadoc.jar`:包含Spring Security核心模块的Java文档,方便开发者查阅API和理解其功能。 - `spring-security-core-4.0.0.CI-SNAPSHOT...

    spring-security 官方文档 中文版

    通过上述介绍,我们了解了 Spring Security 的基本概念、配置方法以及其实现细节,这对于开发者来说是非常宝贵的知识。无论是构建企业级应用还是个人项目,掌握 Spring Security 的使用都将极大地提升应用的安全性和...

    spring security spring security

    spring security spring security 中文文档

    spring_security_3.1

    1. **身份验证**:Spring Security 提供了多种身份验证机制,包括基于内存的、JDBC的、LDAP的和自定义的。在3.1版本中,你可以配置`UserDetailsService`接口来获取用户信息,并使用`AuthenticationProvider`来处理...

    精彩:Spring Security 演讲PPT

    1. **添加过滤器**: 在`web.xml`中加入`DelegatingFilterProxy`,用于将请求委托给Spring Security的过滤器链。 ```xml <filter-name>springSecurityFilterChain <filter-class>org.springframework.web.filter...

    SpringSecurity素材.rar

    1. **SpringSecurity简介**:首先会介绍SpringSecurity的基本概念和架构,包括它如何通过层层过滤器保护Web应用,以及它提供的主要组件如Authentication(认证)和Authorization(授权)。 2. **配置SpringSecurity...

    SpringBoot+SpringSecurity+WebSocket

    1. 配置SpringBoot:创建SpringBoot项目,引入WebSocket和SpringSecurity的相关依赖。 2. 配置WebSocket:实现WebSocket服务器端点,处理连接建立、消息发送和接收。使用`@ServerEndpoint`注解定义WebSocket的端点...

Global site tag (gtag.js) - Google Analytics