gpt4 book ai didi

java - 何时调用 loadUserByUsername? ( Spring 安全)

转载 作者:IT老高 更新时间:2023-10-28 13:55:08 29 4
gpt4 key购买 nike

我正在学习 Spring Security我有几个简单的问题尊重UserDetailsService :

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

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

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

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

最佳答案

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

the manual 中所述:

There is often some confusion about UserDetailsService. It is purely a DAO for user data and performs no other function other than to supply that data to other components within the framework. In particular, it does not authenticate the user, which is done by the AuthenticationManager. In many cases it makes more sense to implement AuthenticationProvider directly if you require a custom authentication process.

  1. 是的。 SecurityContext 实例是 stored in the session一旦用户通过身份验证。

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

关于java - 何时调用 loadUserByUsername? ( Spring 安全),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852703/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com