`

spring-security(十一)Web应用认证过程

阅读更多
前言:
  本文将探讨当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-web源码所需jar包

    Spring Security Web是Spring Security框架的重要组成部分,它主要负责Web应用程序的安全性,包括认证和授权等核心功能。本文将深入探讨Spring Security Web的源码,并介绍与其密切相关的jar包及其作用。 首先,...

    spring-security Jar包

    这个框架被广泛应用于Web应用程序,提供了一套全面的安全解决方案,包括用户认证、授权、会话管理以及防止常见攻击(如CSRF、XSS等)。在你提到的"spring-security-3.0.5.RELEASE"版本中,我们将深入探讨该框架的...

    spring-security所需要的jar包,

    Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。这个压缩包包含了Spring Security的核心组件,以及与其相关的 Acegi Security 框架的一些版本。这些jar包是构建和配置Spring ...

    spring-security-oauth2与spring-security-web 3.1.2 源码

    Spring Security是Java领域中广泛应用的安全框架,用于保护Web应用程序免受各种安全威胁。OAuth2则是一种授权协议,常用于提供安全的第三方应用访问资源的权限。在这个源码分析中,我们将深入探讨`spring-security-...

    springsecurity所有jar包

    它为Web应用和企业级应用提供安全解决方案,包括用户认证、权限控制、会话管理等多个方面。在Spring Security 3.1.2版本中,包含了多个jar包,每个jar包都有其特定的功能,下面将对这些关键jar包进行详细介绍。 1. ...

    spring security 4.0.0所需jar包

    这个压缩包包含了Spring Security 4.0.0版本所需的jar包,这是一组核心组件,为构建安全的Web应用提供了基础。 1. **spring-security-core**: - `spring-security-core-4.0.0.CI-SNAPSHOT-javadoc.jar`:包含...

    spring-security3.1.4 完整的jar包

    这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了强大的安全基础设施,涵盖了从Web应用到分布式系统,从本地用户认证到第三方服务集成的各种安全需求。开发者可以根据实际项目需求选择和...

    spring-security-core-3.1.0.RC1.jar

    Spring Security是Java平台上的一款强大且高度可配置的安全框架,用于解决Web应用和企业级应用的安全需求。在本篇文章中,我们将深入探讨Spring Security的核心库——`spring-security-core-3.1.0.RC1.jar`,以及它...

    spring-boot-security

    Spring Security是一个全面的、可高度定制的安全框架,适用于Java Web应用程序,包括认证、授权、会话管理等多个方面。在Spring Boot中,通过引入`spring-boot-starter-security`起步依赖,我们可以快速地在项目中...

    spring-security源代码

    它提供了认证、授权、访问控制以及CSRF防护等核心功能,广泛应用于Web应用和企业级系统。这个压缩包文件"spring-security-parent-2.0.4"是Spring Security的2.0.4版本,是一个Eclipse项目,适合开发者直接导入到...

    spring-security4.1.3

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。在本示例中,我们关注的是Spring Security的4.1.3版本,它与Spring框架的4.3.2版本集成。这个集成旨在提供安全...

    spring-security-4.2.2.RELEASE所有Jar包和源码

    spring-security-4.2.2.RELEASE相关的jar包和源码。包含核心的认证和连接控制类和接口,用spring security的框架都需要这些。支持单独的应用程序,远程客户端,方法(服务层) 安全和jdbc的基本服务.

    spring-security-3.0.5.RELEASE

    Spring Security 是一个强大的且高度可定制的框架,用于保护基于Java的Web应用程序。这个压缩包“spring-security-3.0.5.RELEASE”包含了该框架的3.0.5版本,这是一个相对较老但仍然被一些项目使用的版本。下面将...

    spring-security-oauth2-authorization-server.zip

    在IT领域,安全是至关重要的,特别是在Web应用中。Spring Security是Java开发人员广泛使用的安全框架,它提供了全面的身份验证和授权解决方案。本项目“spring-security-oauth2-authorization-server”将带你深入...

    spring-security-material-master.zip

    Spring Security 是一个强大的安全框架,主要用于Java web应用的安全管理。在Spring Boot中,Spring Security 提供了一种简单而有效的方式来保护应用程序,防止未经授权的访问。本资料“spring-security-material-...

    SpringSecurity.zip

    ​ Spring Security:spring家族一员。是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转...

    Spring-Security-Demo-master.zip

    总结,Spring Security与Spring Boot的结合为Web应用提供了强大而灵活的安全管理机制,同时MyBatis的加入使得数据访问更为便捷。在实际开发中,这些技术的融合能帮助我们快速构建安全、高效的业务系统。

    spring-security-web-3 source code

    Spring Security是Java平台上的一款强大的安全框架,它为Web应用程序提供了全面的安全管理解决方案。在这个主题中,我们将深入探讨`spring-security-web-3`的源码,理解其核心机制,从而更好地利用这个框架来保护...

    spring-security文档和jar包

    它为Web应用和企业级应用提供了安全性的解决方案。这个压缩包包含了Spring Security的中文文档和3.1版本的jar包,这对于理解和使用Spring Security 3.1来说是非常宝贵的资源。 《Spring+Security+3.x.chm》是一个...

    spring-Security-oauth2.zip

    总之,"spring-Security-oauth2.zip" 包含的资料将指导开发者如何在Spring Security环境中配置和使用OAuth2,实现安全的身份验证和授权,为Web应用提供更高级别的安全保护。通过理解OAuth2的工作原理和Spring ...

Global site tag (gtag.js) - Google Analytics