【Spring Security】 用户 密码 认证

Metadata

title: 【Spring Security】 用户 密码 认证
date: 2023-02-01 19:52
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/SpringSecurity
categories:
  - SpringSecurity
keywords:
  - SpringSecurity
description: 【Spring Security】 用户 密码 认证

【Spring Security】 用户 密码 认证

验证用户身份的最常见方法之一是验证用户名和密码。因此,Spring Security 为使用用户名和密码进行身份验证提供了全面的支持。

Spring Security 提供了以下内置机制来从 读取用户名和密码:

  • Form Login
  • Basic Authentication
  • Digest Authentication

用户名密码存储机制:

  • 具有内存中身份验证的简单存储
  • 具有 JDBC 身份验证的关系数据库
  • 使用 UserDetailsS​​ervice 自定义数据存储
  • 带有 LDAP 身份验证的 LDAP 存储

Form Login

Spring Security 支持通过 html 表单提供用户名和密码。让我们来看看基于表单的登录在 Spring Security 中是如何工作的。

首先,我们看到用户如何被重定向到登录表单。

  1. 首先,用户向其未授权的资源 / private 发出未经身份验证的请求。
  2. Spring Security 的 FilterSecurityInterceptor 指示未认证的请求被拒绝通过抛出 AccessDeniedException。
  3. 由于用户未通过身份验证,因此 ExceptionTranslationFilter 启动开始身份验证并使用配置的 AuthenticationEntryPoint,在大多数情况下 AuthenticationEntryPoint 是的 LoginUrlAuthenticationEntryPoint 实例。
  4. 然后浏览器将请求它被重定向到的登录页面。
  5. 应用程序显示默认或者自定义的登录页面。

提交用户名和密码后,将 UsernamePasswordAuthenticationFilter 验证用户名和密码。该 UsernamePasswordAuthenticationFilter 扩展 AbstractAuthenticationProcessingFilter。

  1. 当用户提交他们的用户名和密码,则 UsernamePasswordAuthenticationFilter 创建一个 UsernamePasswordAuthenticationToken 其是一种类型的 Authentication 通过提取从所述用户名和密码 HttpServletRequest。
  2. 接下来,将 UsernamePasswordAuthenticationToken 传递给 AuthenticationManager 要进行身份验证的 。AuthenticationManager 外观的详细信息取决于用户信息的存储方式。
  3. 如果身份验证失败,则失败,该 SecurityContextHolder 将被清除出去。
    RememberMeServices.loginFail 被调用。如果记住我没有配置,这是一个空操作。最终 AuthenticationFailureHandler 被调用。
  4. 如果身份验证成功,则 Success。SessionAuthenticationStrategy 收到新登录通知。该认证被设置在 SecurityContextHolder 中。RememberMeServices.loginSuccess 被调用。如果记住我没有配置,这是一个空操作。ApplicationEventPublisher 发布一个 InteractiveAuthenticationSuccessEvent。在 AuthenticationSuccessHandler 被调用。