Spring Security工作原理和认证流程

一、工作原理

Spring Security所解决的问题是安全访问控制,而安全访问控制功能就是对所有访问系统的请求进行拦截,校验每个请求是否能访问它所期望的资源。一般可以通过Filter和AOP来实现,Spring Security对web资源的保护是通过Filter来实现的,所以从Filter来入手学习Spring Security的原理。

当初始化Spring Security的时候,会创建SpringSecurityFilterChain的过滤器,类型为org.springframework.security.web.FilterChainProxy,它实现了javax.servlet.Filter。因此外部的请求会经过此类。下图是Spring Security的过滤器链结构图:
在这里插入图片描述

pom依赖,单独使用Spring Security只需要添加spring-boot-starter-security它是是spring-security的starter。

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
  </dependency>

过滤器链的类图:
在这里插入图片描述
最终通过AccessDecisionManager和AuthenticationManager进行授权和认证。

1.1 主要过滤器的作用

在这里插入图片描述
在这里插入图片描述

二 认证流程

在这里插入图片描述

2.1 UsernamePasswordAuthenticationFilter

1.找到UsernamePasswordAuthenticationFilter用于账号密码验证
在这里插入图片描述
2.继承AbstractAuthenticationProcessingFilter,查看doFilter
在这里插入图片描述
3.调用了attemptAuthentication(request, response),这个方法在AbstractAuthenticationProcessingFilter是一个抽象方法在这里插入图片描述
4.实际执行的是UsernamePasswordAuthenticationFilter的attemptAuthentication。
在这里插入图片描述
5.后面又调用AuthenticationManager的authenticate(Authentication authentication),这是一个接口,看看实现类
在这里插入图片描述
6.认证就是从ProviderManager的authenticate开始,ProviderManager维护了一个 AuthenticationProvider的列表,可以自定义类实现AuthenticationProvider从而进行自己的账号密码验证逻辑。当然Spring Security给我们提供了默认的实现DaoAuthenticationProvider

private List<AuthenticationProvider> providers = Collections.emptyList()

在这里插入图片描述
7.遍历providers 调用的authenticate(Authentication authentication)在AbstractUserDetailsAuthenticationProvider里面
在这里插入图片描述
8.DaoAuthenticationProvider的retrieveUser方法中调用UserDetailsService查询用户信息
在这里插入图片描述
9.获取到用户信息之后调用additionalAuthenticationChecks进行密码校验
在这里插入图片描述
10.DaoAuthenticationProvider中的additionalAuthenticationChecks的实现方法进行最终校验
在这里插入图片描述
回到doFilter方法,进入successfulAuthentication(request, response, chain, authenticationResult);
在这里插入图片描述
将认证结果放入安全上下文

三、总结

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security是一个强大且灵活的身份验证和授权框架,它基于Servlet过滤器、Spring AOP和Spring IoC容器等技术实现。它的工作原理可以简单概括为以下几个步骤: 1. 请求拦截:Spring Security通过一个Servlet过滤器(DelegatingFilterProxy)拦截所有的HTTP请求。 2. 身份验证:当一个请求被拦截时,Spring Security首先会尝试从请求中获取用户的身份凭证(如用户名和密码),然后使用身份凭证进行身份验证。 3. 用户认证Spring Security将用户的身份凭证传递给一个认证管理器(AuthenticationManager),由认证管理器对凭证进行验证,通常会使用一个或多个身份验证提供者(AuthenticationProvider)来完成实际的认证过程。 4. 认证结果处理:认证管理器将认证结果封装成一个认证对象(Authentication),其中包括用户的身份信息和权限信息。如果认证成功,认证对象将被存储在一个安全上下文(SecurityContext)中。 5. 授权验证:在请求处理过程中,Spring Security会根据安全上下文中的认证对象,对用户进行授权验证。它会根据配置的访问规则(如URL路径、HTTP方法等)以及用户的权限信息,判断用户是否有权限执行当前请求。 6. 访问控制:如果用户被授权执行当前请求,Spring Security会允许请求继续处理;否则,它会返回一个错误页面或执行其他自定义的处理逻辑。 总的来说,Spring Security通过请求拦截、身份验证、用户认证、授权验证和访问控制等步骤来保护应用程序的安全性。它提供了丰富的配置选项和扩展点,可以满足各种不同的安全需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值