- 浏览: 193798 次
- 性别:
- 来自: 南京
文章分类
最新评论
前言:
本文将探讨当web应用中加入的spring security功能时,用户是如何认证的、安全上下文是如何创建的。
环境:
spring boot 版本:1.5.4.RELEASE
1.一个典型的web应用的认证过程如下:
上面中大多数步骤在spring security中都有单独的类负责完成,按照使用的顺序主要有以下参与者
2.ExceptionTranslationFilter
ExceptionTranslationFilter是一个过滤器,负责处理在spring security中抛出的所有异常。这些异常通常情况下都是由最主要的认证服务提供者AbstractSecurityInterceptor所抛出的。这个类我们后面会进一步探讨,现阶段我们只用知道他会产生认证异常就够了,不用去关心他是如何进行认证处理的。ExceptionTranslationFilter会根据产生的异常类型来确定是返回给客户端一个代表拒绝的403码(当用户已经认证过,但是访问了一个他没有权限访问的资源时,上面步骤中的第七步),或者是启动一个AuthenticationEntryPoint(当用户还没有认证时,上面步骤的第三步)
3.AuthenticationEntryPoint
AuthenticationEntryPoint负责上面步骤中的第三步。在有安全控制的web应用中都会有一个默认的认证策略,也都会提供自己的AuthenticationEntryPoint实现来让用户完成认证。
4. AuthenticationManager
一旦浏览器提供了认证的凭证信息(http post请求中的表单信息或者http头信息),服务器端就需要一种机制来收集这些信息,即执行上面步骤中的第六步,这个过程在spring security中叫做认证机制。如基于form的login和Basic认证机制中的http header,当凭证信息收集完成后,具体的认证机制将生成一个Authentication对象,并提供给AuthenticationManager。如果之后凭证信息有效,认证机制会从AuthenticationManager获取一个完全组装好的Authentication对象(包含权限信息),并把Authentication对象存储到SecurityContextHolder中,并重新执行触发认证的原始请求,如果凭证信息不合法,认证机制将要求用户重新认证。
5.另一个核心处理-如何在请求之间存储SecurityContext
在一个典型的web应用中,用户认证一次,他后续的操作将通过对应的session id来标示,不需要每次都认证,服务器负责在一次会话期间缓存这些认证信息。在spring security中这个功能是通过SecurityContextPersistenceFilter来实现的,默认情况下他会把认证信息存储到httpSession的一个属性中,在每一次http请求开始时,这个过滤器都会自动从session中拿出认证的上下文信息存储到SecurityContextHolder中,并且在请求结束后从SecurityContextHolder中把认证信息删除掉(为了安全考虑,确保能执行操作的用户的确是认证过的,并且不是其他人的认证信息)
在有一些web应用中(例如无状态的restful web服务)不使用session机制,因而每次请求都会进行认证,但是我们仍然需要把SecurityContextPersistenceFilter加到过滤器链中,主要就是确保每次请求完成后SecurityContextHolder都会被正确清空。
本文将探讨当web应用中加入的spring security功能时,用户是如何认证的、安全上下文是如何创建的。
环境:
spring boot 版本:1.5.4.RELEASE
1.一个典型的web应用的认证过程如下:
- 用户访问网站主页,点击一个链接
- 一个请求到达服务器,服务器发现用户正在访问一个受保护的资源
- 因为到目前为止,用户还没有认证,所以服务器发回一个响应,指示用户必须先验证,这个响应或者是一个响应码,也可能是直接重定向到登录页
- 根据认证的实现方式不同,用户可能会重定向到登录页等待用户输入用户名、密码等表单信息,或者浏览器以某种方式获取用户的证书(Basic认证中的弹出框,cookies机制,或者如X509认证方式中的证书)
- 浏览器收集到认证信息后,会重新向服务器提交请求,这个请求也根据具体的实现方式而异,即可是一个带着表单信息的http post提交,也可以是http头部信息中包含认证信息详情的简单请求
- 接着,服务器会验证用户提交的认证信息是否合法,如果合法就会执行下一步,如果不合法,通常情况下用户会被提示要重新认证(重新执行上面的两步)
- 最初导致用户进行认证的请求将重新尝试执行。如果用户提供的认证信息有足够的权限访问受保护的资源,则之前的请求就会顺利完成,否则用户将收到一个代表权限不足的响应码:403
上面中大多数步骤在spring security中都有单独的类负责完成,按照使用的顺序主要有以下参与者
- ExceptionTranslationFilter
- AuthenticationEntryPoint
- AuthenticationManager
2.ExceptionTranslationFilter
ExceptionTranslationFilter是一个过滤器,负责处理在spring security中抛出的所有异常。这些异常通常情况下都是由最主要的认证服务提供者AbstractSecurityInterceptor所抛出的。这个类我们后面会进一步探讨,现阶段我们只用知道他会产生认证异常就够了,不用去关心他是如何进行认证处理的。ExceptionTranslationFilter会根据产生的异常类型来确定是返回给客户端一个代表拒绝的403码(当用户已经认证过,但是访问了一个他没有权限访问的资源时,上面步骤中的第七步),或者是启动一个AuthenticationEntryPoint(当用户还没有认证时,上面步骤的第三步)
3.AuthenticationEntryPoint
AuthenticationEntryPoint负责上面步骤中的第三步。在有安全控制的web应用中都会有一个默认的认证策略,也都会提供自己的AuthenticationEntryPoint实现来让用户完成认证。
4. AuthenticationManager
一旦浏览器提供了认证的凭证信息(http post请求中的表单信息或者http头信息),服务器端就需要一种机制来收集这些信息,即执行上面步骤中的第六步,这个过程在spring security中叫做认证机制。如基于form的login和Basic认证机制中的http header,当凭证信息收集完成后,具体的认证机制将生成一个Authentication对象,并提供给AuthenticationManager。如果之后凭证信息有效,认证机制会从AuthenticationManager获取一个完全组装好的Authentication对象(包含权限信息),并把Authentication对象存储到SecurityContextHolder中,并重新执行触发认证的原始请求,如果凭证信息不合法,认证机制将要求用户重新认证。
5.另一个核心处理-如何在请求之间存储SecurityContext
在一个典型的web应用中,用户认证一次,他后续的操作将通过对应的session id来标示,不需要每次都认证,服务器负责在一次会话期间缓存这些认证信息。在spring security中这个功能是通过SecurityContextPersistenceFilter来实现的,默认情况下他会把认证信息存储到httpSession的一个属性中,在每一次http请求开始时,这个过滤器都会自动从session中拿出认证的上下文信息存储到SecurityContextHolder中,并且在请求结束后从SecurityContextHolder中把认证信息删除掉(为了安全考虑,确保能执行操作的用户的确是认证过的,并且不是其他人的认证信息)
在有一些web应用中(例如无状态的restful web服务)不使用session机制,因而每次请求都会进行认证,但是我们仍然需要把SecurityContextPersistenceFilter加到过滤器链中,主要就是确保每次请求完成后SecurityContextHolder都会被正确清空。
发表评论
-
spring-security(二十五)鉴权
2018-03-27 11:21 1599前言 本文将详细探讨spring security中的鉴权 ... -
test
2018-03-19 21:20 0什么是服务发现 ... -
spring-security(二十四)CSRF
2018-03-24 09:54 81581.什么是CSRF攻击 下面我们以一个具体的例子来说明这种常见 ... -
spring-security(二十三)Remember-Me认证
2018-03-09 21:06 1340前言: Remember-me认证方式指的是能在不同的会话 ... -
spring-security(二十二)基本认证和摘要认证
2018-03-06 16:58 1801前言: 在web应用中,非常流行以基本认证和摘要认证作为备 ... -
spring-security(二十一)核心Filter-UsernamePasswordAuthenticationFilter
2018-03-04 11:05 1236一、UsernamePasswordAuthenticatio ... -
spring-security(二十)核心Filter-SecurityContextPersistenceFilter
2018-02-28 21:40 1131一、SecurityContextPersistenceFil ... -
spring-security(十九)核心Filter-ExceptionTranslationFilter
2018-02-27 16:31 2059前言: 在spring的安全 ... -
spring-security(十八)核心Filter-FilterSecurityInterceptor
2018-02-25 10:59 2344前言: 当用spring secur ... -
spring-security(二十六)整合CAS 实现SSO
2018-04-05 18:09 12421.cas 认证流程 2.spring security ... -
spring-security(十七)Filter顺序及简介
2018-02-22 18:16 7900前言: spring security在 ... -
spring-security(十六)Filter配置原理
2018-02-21 15:18 2385前言: spring security最常见的应用场景还是 ... -
spring-security(十五) Password编码
2018-02-19 15:15 1224前言: 在实际应用中 ... -
spring-security(十四)UserDetailsService
2018-02-19 11:35 1470前言: 作为spring security的核心类,大多数 ... -
spring-security(十三)核心服务类
2018-02-18 16:46 1411前言: 在之前的篇章中我们已经讲述了spring secu ... -
spring-security(十二)鉴权方式概述
2018-02-18 10:42 2526前言: 本文主要讲述在spring security鉴权的 ... -
spring-security(十)基本认证过程
2018-02-17 13:55 2106前言: 在spring security中认证具体指的是什 ... -
spring-security(九)-核心组件
2018-02-17 10:46 867前言: 本文主要介绍在spring security中的几 ... -
spring-security(八)java config-sample之cas client
2018-02-16 11:26 2067前言: SSO英文全称Single Sign On,单点登 ... -
spring-security(七)java config-sample之concurrency
2018-02-15 10:51 670前言: 在实际应用中,我们可能会限制一个用户同时登录同一个 ...
相关推荐
Spring Security Web是Spring Security框架的重要组成部分,它主要负责Web应用程序的安全性,包括认证和授权等核心功能。本文将深入探讨Spring Security Web的源码,并介绍与其密切相关的jar包及其作用。 首先,...
这个框架被广泛应用于Web应用程序,提供了一套全面的安全解决方案,包括用户认证、授权、会话管理以及防止常见攻击(如CSRF、XSS等)。在你提到的"spring-security-3.0.5.RELEASE"版本中,我们将深入探讨该框架的...
Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。这个压缩包包含了Spring Security的核心组件,以及与其相关的 Acegi Security 框架的一些版本。这些jar包是构建和配置Spring ...
Spring Security是Java领域中广泛应用的安全框架,用于保护Web应用程序免受各种安全威胁。OAuth2则是一种授权协议,常用于提供安全的第三方应用访问资源的权限。在这个源码分析中,我们将深入探讨`spring-security-...
它为Web应用和企业级应用提供安全解决方案,包括用户认证、权限控制、会话管理等多个方面。在Spring Security 3.1.2版本中,包含了多个jar包,每个jar包都有其特定的功能,下面将对这些关键jar包进行详细介绍。 1. ...
这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了基础。 1. **spring-security-core**: - `spring-security-core-4.0.0.CI-SNAPSHOT-javadoc.jar`:包含...
这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...
Spring Security是Java平台上的一款强大且高度可配置的安全框架,用于解决Web应用和企业级应用的安全需求。在本篇文章中,我们将深入探讨Spring Security的核心库——`spring-security-core-3.1.0.RC1.jar`,以及它...
Spring Security是一个全面的、可高度定制的安全框架,适用于Java Web应用程序,包括认证、授权、会话管理等多个方面。在Spring Boot中,通过引入`spring-boot-starter-security`起步依赖,我们可以快速地在项目中...
它提供了认证、授权、访问控制以及CSRF防护等核心功能,广泛应用于Web应用和企业级系统。这个压缩包文件"spring-security-parent-2.0.4"是Spring Security的2.0.4版本,是一个Eclipse项目,适合开发者直接导入到...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本示例中,我们关注的是Spring Security的4.1.3版本,它与Spring框架的4.3.2版本集成。这个集成旨在提供安全...
spring-security-4.2.2.RELEASE相关的jar包和源码。包含核心的认证和连接控制类和接口,用spring security的框架都需要这些。支持单独的应用程序,远程客户端,方法(服务层) 安全和jdbc的基本服务.
Spring Security 是一个强大的且高度可定制的框架,用于保护基于Java的Web应用程序。这个压缩包“spring-security-3.0.5.RELEASE”包含了该框架的3.0.5版本,这是一个相对较老但仍然被一些项目使用的版本。下面将...
在IT领域,安全是至关重要的,特别是在Web应用中。Spring Security是Java开发人员广泛使用的安全框架,它提供了全面的身份验证和授权解决方案。本项目“spring-security-oauth2-authorization-server”将带你深入...
Spring Security 是一个强大的安全框架,主要用于Java web应用的安全管理。在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-...
Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...
总结,Spring Security与Spring Boot的结合为Web应用提供了强大而灵活的安全管理机制,同时MyBatis的加入使得数据访问更为便捷。在实际开发中,这些技术的融合能帮助我们快速构建安全、高效的业务系统。
Spring Security是Java平台上的一款强大的安全框架,它为Web应用程序提供了全面的安全管理解决方案。在这个主题中,我们将深入探讨`spring-security-web-3`的源码,理解其核心机制,从而更好地利用这个框架来保护...
它为Web应用和企业级应用提供了安全性的解决方案。这个压缩包包含了Spring Security的中文文档和3.1版本的jar包,这对于理解和使用Spring Security 3.1来说是非常宝贵的资源。 《Spring+Security+3.x.chm》是一个...
总之,"spring-Security-oauth2.zip" 包含的资料将指导开发者如何在Spring Security环境中配置和使用OAuth2,实现安全的身份验证和授权,为Web应用提供更高级别的安全保护。通过理解OAuth2的工作原理和Spring ...