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主题中。下面,让我们首先从配置认证管理器开始。
分享到:
相关推荐
Spring Security 实践指南 Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户...
Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理,它为Web应用和企业级应用提供了全面的安全服务。这个框架能够处理认证、授权以及各种安全相关的功能,帮助开发者构建安全、可扩展的应用。以下...
SpringSecurity是Java领域中一款强大的安全框架,主要用于Web应用程序的安全管理。它提供了全面的身份验证、授权、会话管理以及安全相关的功能,可以帮助开发者构建安全的Web应用。在本笔记中,我们将深入探讨Spring...
Spring Security是一个功能强大、高度定制的安全框架,它专门用于为基于Spring的应用程序提供安全性解决方案。Spring Security架构的设计初衷是为了解决认证和授权的需求,确保应用程序的安全性。它提供了全面的安全...
在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...
Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中,我们将深入探讨Spring Security的核心概念以及如何将其应用于实际的Web应用程序开发。 首先,我们从用户、...
SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、授权和访问控制功能。在本文中,我们将深入探讨SpringSecurity的核心概念、关键组件以及如何配置和使用这个框架。 首先,Spring...
在压缩包文件`spring_gateway_security_webflux`中,可能包含了示例代码或配置文件,用于演示如何在Spring Cloud Gateway中集成Spring Security,实现统一登录认证鉴权。这些资源可以帮助开发者更快地理解和实践上述...
Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...
SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 知识点1:SpringBoot+SpringSecurity框架简介 ...
### Spring Security 3.0.1 中文版知识点解析...通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这有助于开发者更好地利用 Spring Security 为应用程序构建强大的安全防护。
Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...
Spring Security是Spring生态体系中的一个核心组件,主要负责应用程序的安全性,包括认证和授权。它为Web应用提供了全面的保护,防止未经授权的访问和操作。在版本2.5时,Spring Security已经是一个成熟且功能丰富的...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛用于Java应用程序的安全性管理。这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了...
通过上述介绍,我们了解了 Spring Security 的基本概念、配置方法以及其实现细节,这对于开发者来说是非常宝贵的知识。无论是构建企业级应用还是个人项目,掌握 Spring Security 的使用都将极大地提升应用的安全性和...
spring security spring security 中文文档
### Spring Security 概述与应用实践 #### 一、引言 在当今互联网时代,网络安全问题日益凸显,尤其是Web应用程序的安全性受到了前所未有的关注。为了应对这些挑战,Spring Security 应运而生,成为了一个非常重要...
在IT行业中,SpringBoot、SpringSecurity和WebSocket是三个非常重要的技术组件,它们分别在应用程序开发、安全管理和实时通信方面发挥着关键作用。本项目结合这三个技术,构建了一个整合的示例,旨在展示如何在...
Spring Security 是一个强大的安全框架,主要用于Java Web应用的安全管理,包括认证、授权和访问控制等。在Spring Boot中,Spring Security 提供了简洁的API和自动化配置,使得开发者能够快速集成安全功能。在这个名...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,专为Java应用程序设计。它在Spring生态系统中扮演着核心安全组件的角色,使得开发者能够轻松地实现安全性需求,包括用户认证、授权、会话管理...