猿问

Spring Security - 检索当前尝试登录的用户的用户名

我需要实现一个PasswordEncoder生成盐渍密码的方法。盐是用户特定的(UUID)并存储在相应的User对象中。

因此,我需要访问User直接或UserDetails持有引用的对象。很容易检索如果我有用户试图登录的名称。

这就是问题所在。我似乎无法掌握它。

SecurityContext我们而言,我们仍在处理一个问题anonymousUser

我知道UsernamePasswordAuthenticationToken在某个地方应该躺着,但是我不能注意它,因为它不是豆子。要定义一个包含它的包装器bean,我需要先找出它在哪里找到它。

如何获取尝试登录的用户的名称?

非常感谢帮助。:)

(旁注:请不要建议我“不要那样做”或者移植密码并开始使用BCryptPasswordEncoder这些或类似的东西。这是我们非常希望在将来某个时候做的事情,但暂时是不允许的。)


收到一只叮咚
浏览 611回答 2
2回答

临摹微笑

您将无法单独执行此操作,PasswordEncoder因为抽象假定您可以仅使用纯文本密码对密码进行编码(或使用散列密码进行比较)。但是,如果您使用自定义AuthenticationProvider(调用它PasswordEncoder),您将可以访问Authentication包含用户名的传入对象。更多信息在这里。

宝慕林4294392

调用PasswordEncoder.matches(...)是通过additionalAuthenticationChecks(...)方法获得的DaoAuthenticationProvider,该方法可以访问用户名value(principal)。如果需要访问它,则需要子类化DaoAuthenticationProvider并覆盖(替换)该方法,并确保Spring在配置时使用您的子类。
随时随地看视频慕课网APP

相关分类

Java
我要回答