当 loadUserByUsername 被调用时?(弹簧安全)

2022-09-02 01:50:52

我正在学习,我有几个快速的问题尊重:Spring SecurityUserDetailsService

1-何时实际调用或调用?身份验证后?每次登录只一次?loadUserByUsername

2-登录后,Spring会将实际登录的用户放入httpSession吗?

3-推荐的填充集合的方法是什么?<GrantedAuthority>UserDetails

  1. Eagle获取它们,因此当调用loadUserByUsername时,返回的用户已经拥有它的“ROLES”
  2. 实现另一个自定义过滤器,例如成功登录后填充?UsernamePasswordAuthenticationFilter
  3. 以上都不是...

答案 1
  1. 它通常由实例调用,以便对用户进行身份验证。例如,在提交用户名和密码时,将调用 a 来查找该用户的密码,以查看其是否正确。它通常还会提供有关用户的其他一些信息,例如权限和您可能希望为登录用户访问的任何自定义字段(例如电子邮件)。这是主要的使用模式。您可以对代码进行 grep,以准确查看调用它的位置。AuthenticationProviderUserdetailsService

手册中所述:

关于用户详细信息服务经常存在一些混淆。它纯粹是用户数据的DAO,除了将该数据提供给框架内的其他组件之外,不执行任何其他功能。特别是,它不对用户进行身份验证,这是由身份验证管理器完成的。在许多情况下,如果需要自定义身份验证过程,则直接实现身份验证提供程序更有意义。

  1. 是的。用户通过身份验证后,实例将存储在会话中SecurityContext

  2. 如果您需要实现自定义,那么它将取决于您的要求以及它们的存储方式。通常,您将与其他用户信息同时加载它们。这不是你可能在过滤器中做的事情。如上面的手册引用中所述,如果您实际实现的是不同的身份验证机制,那么您应该直接实现。在你的应用中没有强制要求。您可以将其视为某些内置功能使用的策略。UserDetailsServiceAuthenticationProviderUserDetailsService


答案 2

推荐