Spring Security Authentication(二

2020-04-22  本文已影响0人  又语

本文介绍 Spring Security 用户名 / 密码认证相关原理。


目录


用户名 / 密码的读取 / 存储机制

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

存储机制:


表单登录

Spring Security 基于表单的登录流程:

  1. 首先,用户发起未经身份认证的请求;
  2. FilterSecurityInterceptor 抛出一个 AccessDeniedException 异常拒绝了请求;
  3. 因为用户未被认证,ExceptionTranslationFilter 启动认证并使用已配置的 AuthenticationEntryPoint 将请求重定向到登录页面,大多数情况下 AuthenticationEntryPoint 是一个 LoginUrlAuthenticationEntryPoint 实例;
  4. 浏览器将请求重定向到登录页面。

UsernamePasswordAuthenticationFilter 会验证提交的用户名和密码,UsernamePasswordAuthenticationFilter 继承自 AbstractAuthenticationProcessingFilter,流程如下:

  1. 用户提交了用户名和密码后,UsernamePasswordAuthenticationFilter 创建了一个 UsernamePasswordAuthenticationTokenUsernamePasswordAuthenticationTokenAuthentication 的一个子类,将用户名和密码从 HttpServletRequest 中提取出来;
  2. UsernamePasswordAuthenticationToken 传递给 AuthenticationManager 用于身份认证。AuthenticationManager 的详细信息取决于用户信息的存储方式;
  3. 如果认证失败,执行以下动作:
    • SecurityContextHolder 被清空;
    • 调用 RememberMeServices.loginFail,如果未配置 Remember Me 则忽略;
    • 调用 AuthenticationFailureHandler
  4. 如果认证成功,执行以下动作:
    • 通知 SessionAuthenticationStrategy 有新的登录;
    • SecurityContextHolder 上设置 Authentication
    • 调用 RememberMeServices.loginSuccess,如果未配置 Remember Me 则忽略;
    • ApplicationEventPublisher 发布一个 InteractiveAuthenticationSuccessEvent 事件;
    • 调用 AuthenticationSuccessHandler,通常是一个 SimpleUrlAuthenticationSuccessHandler

Spring Security 默认启用了 Form 表单登录,配置方法如下:


基本认证


摘要认证


内存认证


JDBC 认证


UserDetails


UserDetailsService


PasswordEncoder


DaoAuthenticationProvider


LDAP 认证

上一篇下一篇

猜你喜欢

热点阅读