美文网首页
Spring Security Authentication(二

Spring Security Authentication(二

作者: 又语 | 来源:发表于2020-04-22 09:05 被阅读0次

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


目录

  • 用户名 / 密码的读取 / 存储机制
  • 表单登录
  • 基本认证
  • 摘要认证
  • 内存认证
  • JDBC 认证
  • UserDetails
  • UserDetailsService
  • PasswordEncoder
  • DaoAuthenticationProvider
  • LDAP 认证

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

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

  • Form 表单登录
  • 基本认证
  • 摘要认证

存储机制:

  • 基于内存认证的简单存储
  • 基于 JDBC 认证的关系型数据库
  • 使用 UserDetailsService 的自定义数据存储
  • 基于 LDAP 认证的 LDAP 存储

表单登录

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 表单登录,配置方法如下:

  • Java 配置
    protected void configure(HttpSecurity http) {
        http
            // ...
            .formLogin(withDefaults());
    }
    
  • XML 配置
    <http>
      <!-- ... -->
      <form-login />
    </http>
    

基本认证


摘要认证


内存认证


JDBC 认证


UserDetails


UserDetailsService


PasswordEncoder


DaoAuthenticationProvider


LDAP 认证

相关文章

网友评论

      本文标题:Spring Security Authentication(二

      本文链接:https://www.haomeiwen.com/subject/bmhmihtx.html