什么时候调用loadUserByUsername? (春季安全)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候调用loadUserByUsername? (春季安全)相关的知识,希望对你有一定的参考价值。

我正在学习Spring Security,我对UserDetailsService有一些快速的问题:

1-当实际调用或调用loadUserByUsername时?认证后?每次登录只需一次?

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

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

  1. Eagle会在调用loadUserByUsername时获取它们,返回的用户已经拥有它的“ROLES”
  2. 成功登录后实现另一个自定义过滤器,如UsernamePasswordAuthenticationFilter populate?
  3. 以上都不是......
答案
  1. 它通常由AuthenticationProvider实例调用,以便对用户进行身份验证。例如,当提交用户名和密码时,会调用UserdetailsService来查找该用户的密码以查看其是否正确。它还通常会提供有关用户的一些其他信息,例如您可能要为登录用户访问的权限和任何自定义字段(例如,电子邮件)。这是主要的使用模式。您可以grep代码以查看它的确切位置。

the manual所述:

关于UserDetailsS​​ervice经常会有一些混乱。它纯粹是用户数据的DAO,除了将数据提供给框架内的其他组件之外,不执行任何其他功能。特别是,它不会对用户进行身份验证,这是由AuthenticationManager完成的。在许多情况下,如果您需要自定义身份验证过程,则直接实现AuthenticationProvider会更有意义。

  1. 是。一旦用户通过身份验证,SecurityContext实例就是stored in the session
  2. 如果您需要实现自定义UserDetailsService,那么它将取决于您的要求及其存储方式。通常,您将与其他用户信息同时加载它们。这不是你可能在过滤器中做的事情。正如上面手册中的引文所解释的,如果您实际上实现了不同的身份验证机制,那么您应该直接实现AuthenticationProvider。在您的应用中不必强制使用UserDetailsService。您可以将其视为某些内置功能使用的策略。

以上是关于什么时候调用loadUserByUsername? (春季安全)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 2.0.6 调用 UserDetailSservice 的 loadUserByuserName 方法时

获取'无法在grails Spring安全性休息中调用null对象上的方法loadUserByUsername()'

为啥我的 loadUserByUsername 不起作用?

JAVA——springSecurity——自定义配置的一些补充:Anonymous匿名用户重写loadUserByUsername()方法自定义WebSecurityConfig配置等

JAVA——springSecurity自定义配置的一些补充:Anonymous匿名用户重写loadUserByUsername()方法自定义WebSecurityConfig配置等

我在哪里从 Spring Security 中获取“用户名”值以传递给 UserDetailsS​​ervice 接口的 loadUserByUsername(String username) 方法