【Spring Security】 用户 密码 认证
【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 身份验证的关系数据库
- 使用 UserDetailsService 自定义数据存储
- 带有 LDAP 身份验证的 LDAP 存储
Form Login
Spring Security 支持通过 html 表单提供用户名和密码。让我们来看看基于表单的登录在 Spring Security 中是如何工作的。
首先,我们看到用户如何被重定向到登录表单。
- 首先,用户向其未授权的资源 / private 发出未经身份验证的请求。
- Spring Security 的 FilterSecurityInterceptor 指示未认证的请求被拒绝通过抛出 AccessDeniedException。
- 由于用户未通过身份验证,因此 ExceptionTranslationFilter 启动开始身份验证并使用配置的 AuthenticationEntryPoint,在大多数情况下 AuthenticationEntryPoint 是的 LoginUrlAuthenticationEntryPoint 实例。
- 然后浏览器将请求它被重定向到的登录页面。
- 应用程序显示默认或者自定义的登录页面。
提交用户名和密码后,将 UsernamePasswordAuthenticationFilter 验证用户名和密码。该 UsernamePasswordAuthenticationFilter 扩展 AbstractAuthenticationProcessingFilter。
- 当用户提交他们的用户名和密码,则 UsernamePasswordAuthenticationFilter 创建一个 UsernamePasswordAuthenticationToken 其是一种类型的 Authentication 通过提取从所述用户名和密码 HttpServletRequest。
- 接下来,将 UsernamePasswordAuthenticationToken 传递给 AuthenticationManager 要进行身份验证的 。AuthenticationManager 外观的详细信息取决于用户信息的存储方式。
- 如果身份验证失败,则失败,该 SecurityContextHolder 将被清除出去。
RememberMeServices.loginFail 被调用。如果记住我没有配置,这是一个空操作。最终 AuthenticationFailureHandler 被调用。 - 如果身份验证成功,则 Success。SessionAuthenticationStrategy 收到新登录通知。该认证被设置在 SecurityContextHolder 中。RememberMeServices.loginSuccess 被调用。如果记住我没有配置,这是一个空操作。ApplicationEventPublisher 发布一个 InteractiveAuthenticationSuccessEvent。在 AuthenticationSuccessHandler 被调用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论