springSecurity学习总结
1.usernamepasswordauthticationfilter
处理表单的核心拦截器。拦截指定的url路径,提取用户名和密码,创建一个usernamepasswordauthenticationtoken都想给authenticationmanager进行认证。
作用:接受用户提交的用户名和密码,验证用户信息。
如何工作:通过attenptauthentication()方法获取请求中的用户名和密码,创建usernamepasswordauthenticationtoken都对象,传递给AuthenticationManager
进行认证。
2.usernamepassword authentcationtoken
这是表示认证请求的核心类。他是authentiction接口的实现类。用于封装用户名和密码。
作用:封装用户名。密码以及其他认证信息。
3.authenticationmanager
用于认证的接口。负责对authentiction对象进行认证,返回已经认证authtication对象。
作用:接受authentication对象,进行用户认证,返回一个认证后的authentication对象,
如何工作:authenticationmamager 会将请求为投给authenticationprovider认证,
4.daoauthenticationrpivider
常用的认证提供则,负责从数据库加载用户信息验证,通过userdetaservice加载用户信息,比对提供的密码是否正确。
作用:
通过userdetailservice
从数据库或其他地方加载哦用户详细信息,返回一个userdetial接口的对象,yserdetail包含了用户的用户名,密码和权限等等
作用:加载用户的详细信息(用户名,密码,权限)
userdetailservice实现类会查询数据库或其他数据元,获取用户信息,loadUserByUsername()
方法是关键方法。。
userdetails
这是一个接口,表示用户详情,userdetails通常由userdetailservice实现类返回,用于存储基本信息
- 作用:封装用户的详细信息,如用户名、密码、角色、权限等。
- 如何工作:
UserDetails
中包含用户的基本信息,并提供用户权限的集合。
securitycontextholder
securittycontextholder是springsecurity存储当前用户信息的地方,认证成功后,securitycontextholder会存储一个authentication对象
,表示当前的状态。
作用:存储认证信息
如何工作:再认证success后,securitycontextholder 会存储authwntication对象,后续通过securitycontextholder.getcontxtt.getauthentication获取当前都西昂的认证信息
Authentication
这是一个接口,表示用户的认证信息。它包含了用户名、密码、权限等信息。在认证过程中,Authentication
对象会被传递和更新
作用:表示认证信息
如何让工作:authentication对象看可以通过autheniationmanager继续宁认证,认证成功后,他会包含用户的角色,全选等
passwordencoder
这是一个接口,用于对密码进行加密和匹配。Spring Security 提供了多个实现,例如 BCryptPasswordEncoder
、NoOpPasswordEncoder
等。通常在用户登录时,会将输入的密码和数据库中的密码进行比对,PasswordEncoder
用于这一操作。
- 作用:加密和匹配密码。
- 如何工作:当用户登录时,
PasswordEncoder
会将提供的密码与数据库中加密后的密码进行匹配,如果一致,则认证成功。
ExceptionTranslationFilter
当认证或授权过程中发生异常时,ExceptionTranslationFilter
会拦截异常,并根据异常类型返回相应的响应。例如,当认证失败时,它会返回 401 状态码;当用户没有权限时,它会返回 403 状态码。
登录流程:
- 用户提交登录表单:用户通过
POST
请求提交包含用户名和密码的表单。 UsernamePasswordAuthenticationFilter
拦截请求:该过滤器拦截请求,并从请求中提取用户名和密码,创建一个UsernamePasswordAuthenticationToken
对象。AuthenticationManager
认证:将UsernamePasswordAuthenticationToken
对象传递给AuthenticationManager
,由AuthenticationManager
选择合适的AuthenticationProvider
(如DaoAuthenticationProvider
)进行认证。DaoAuthenticationProvider
加载用户信息:DaoAuthenticationProvider
会调用UserDetailsService
从数据库中加载用户信息,并验证密码是否正确。- 认证成功:认证成功后,
UsernamePasswordAuthenticationToken
会被填充,包含用户的权限信息,存储到SecurityContextHolder
中,表示当前用户已认证。 - 认证失败:认证失败时,
ExceptionTranslationFilter
会处理失败的异常,通常会返回 401 或 403 错误 -
这些类共同作用实现了基于表单的认证过程:
UsernamePasswordAuthenticationFilter
负责从表单中提取用户信息。AuthenticationManager
负责进行认证。DaoAuthenticationProvider
和UserDetailsService
用于验证用户名和密码。SecurityContextHolder
存储认证信息。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2024-01-11 redis