身份验证和会话管理在Spring Security中如何工作?

时间:2019-10-25 09:40:59

标签: spring spring-mvc authentication session spring-security

我正在写一篇有关使用Spring-BootSpring-Security作为认证机制开发的应用程序的论文。我想更好地了解框架如何管理会话。

使用带有用户名和密码的登录页面执行身份验证,并将会话存储在JSESSIONID cookie中。用户信息包含在数据库中。

我知道认证过程在Spring Security中是这样工作的:

  1. 凭据从用户传递到AuthenticationFilter,后者创建包含此类凭据的Authentication对象;

  2. 创建的Authentication对象通过AuthenticationManager选择正确的AuthenticationProvider来处理这种身份验证;

  3. AuthenticationProvider仅使用从身份验证对象提取的用户名来调用UserDetailsService

  4. UserDetailsService从数据库中提取用户信息,并将UserDetails对象(即委托人)返回到AuthenticationProvider

  5. 此时AuthenticationProvider验证用户提供的凭据是否与Principal中包含的凭据匹配。如果是,则将Principal封装在Authentication对象中,此时将已通过身份验证的参数设置为“ true”,然后将其返回到AuthenticationManager,然后将其返回到{{1 }};

  6. AuthenticationFilter现在将Authentication对象保存在AuthenticationFilter中,其中Principal内部包含从数据库中提取的用户信息。 SecurityContext保存在ThreadLocal中。

这是我不完全了解的部分:

  1. 与此同时,另一个过滤器必须创建一个SecurityContext cookie并将其发送给用户,并保存用户的会话(cookie的JSESSIONID值)在本地本地并在此会话值和包含Principal的身份验证对象之间创建绑定,并在用户信息内部...对吗?

我的问题是:

程序是否正确? 步骤7中的哪个过滤器? 会话在服务器端存储在哪里? 会话和JSESSIONID之间的绑定在哪里保存?

谢谢。

0 个答案:

没有答案