SpringSecurity 用户名密码登录认证
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
SpringSecurity用户名密码登录认证摘要
UserDetailsService & DaoAuthenticationProvider
UserDetailsService 用于加载用户信息,而 DaoAuthenticationProvider 通过 UserDetailsService 实现用户认证。DaoAuthenticationProvider 是 AbstractUserDetailsAuthenticationProvider 的子类,提供模板方法用于加载用户信息并进行认证。
UsernamePasswordAuthenticationFilter & AbstractAuthenticationProcessingFilter
UsernamePasswordAuthenticationFilter 拦截登录请求,生成 UsernamePasswordAuthenticationToken 并调用 AuthenticationManager 的 authenticate 方法进行认证。认证成功后会调用 successHandler,失败则调用 failureHandler。这个过滤器是 AbstractAuthenticationProcessingFilter 的子类,后者提供模板方法供子类实现具体认证逻辑。
FormLoginConfigurer & AbstractAuthenticationFilterConfigurer
FormLoginConfigurer 继承自 AbstractAuthenticationFilterConfigurer,用于配置表单登录,包括用户名密码参数名称、登录url等,并构建 HttpSecurityBuilder 以创建 DefaultSecurityFilterChain。
DaoAuthenticationProvider 认证流程
DaoAuthenticationProvider 重写了 retrieveUser 方法以加载和认证用户信息,包括处理用户名未找到的情况,以及进行密码匹配。在登录成功后,会通过 createSuccessAuthentication 方法创建成功的认证对象,并可进行密码升级。
AbstractUserDetailsAuthenticationProvider
这是 DaoAuthenticationProvider 的父类,设计用于响应 UsernamePasswordAuthenticationToken 认证请求。处理缓存用户信息,并在必要时从数据源重新加载用户数据,最后创建认证成功的 Authentication 对象。
PasswordEncoder
PasswordEncoder 是密码加密器接口,用于加密密码和匹配原始密码与加密密码。还可以用于升级加密算法。
AbstractAuthenticationFilterConfigurer & HttpSecurity
AbstractAuthenticationFilterConfigurer 作为认证过滤器的配置基类,实现了抽象方法 init() 和 configure(),并将配置的过滤器添加到 HttpSecurityBuilder 中。最终,HttpSecurity 构建出 DefaultSecurityFilterChain。
想要了解更多内容?