SpringSecurity局部认证管理器构建流程

148 阅读2分钟
  • 首先放入SharedObject的是局部认证管理器构建器,下面是执行getHttp()的时候
  • 然后在HttpSecurity在构建的时候,beforeConfigure方法不是空的了,可以看出就是从sharedObject中获取局部认证管理器构建器,然后再往sharedObject中设置局部认证管理器
  • 然后beforeInit,beforeConfigure,configure都是空方法
  • performBuild方法:
    • 设置认证提供者,全局认证管理器
    • 设置是否在认证成功后擦除密码
    • 设置消息推送器
  • 此时回到HttpSecurity的构建流程,beforeConfigure后面执行的方法是configure,这是遍历HttpSecurity中的配置类进行配置,其中有一个专门配置表单登录的 (FormLoginConfigurer) ,进入该配置类
  • 可以看到:
    • 设置端口映射器
    • 设置请求缓存器:作用是比想要访问/a页面,但是由于未登陆会先跳转到/login页面进行登录,登录完成后默认是会重定向到原请求地址,也就是/a页面,但是可能/a请求原来会携带一些参数,就会由请求缓存器将原请求的参数读出来,然后包装重定向的这次请求,默认请求缓存器的策略是基于session的HttpSessionRequestCache
    • 然后就是从sharedObject中获取认证管理器,也就是局部认证管理
    • 设置认证成功/失败的处理器
    • 设置authenticationDetailsSource:就是在创建认证对象的时候,把请求中的那些信息保存到认证对象中的策略
    • 设置session的策略:默认只有ChangeSessionIdAuthenticationStrategy,也可以有csrf,并发,注册session等等的策略
    • 设置记住我服务:比如在认证成功后,要把sessionid塞到cookie中
    • 最后就是执行后置处理器器:默认只有AutowireBeanFactoryObjectPostProcessor,这是让new出来的bean注册到容器中的处理器
  • 至此表单登录中的参数配置完毕
  • 但是局部认证管理器构建器中有以下几个东西没有讲
    • 认证提供者:局部里面默认就有至此匿名用户的一个认证提供者
    • 是否在认证成功后擦除密码标志位
    • 消息推送器
  • 匿名用户认证提供者:是在AnonymousConfigurer在执行init方法的时候,会将自身的提供者放到局部认证管理器构建器中
  • 消息推送器/是否在认证成功后擦除密码标志位:
    • 其实是在 getHttp()中已经赋值了的