gpt4 book ai didi

java - Spring Security - 身份验证的用户名在 AuthenticationSuccessHandler 中为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:34 26 4
gpt4 key购买 nike

我有一个包含所有帐户信息的 Customer 类。(它不扩展 Spring 的 userdetails.User 类)我正在尝试在成功登录后做一些事情(例如设置新的上次登录时间)。为此,我设置了自定义 AuthenticationSuccessHandler .

onAuthenticationSuccess方法我尝试从 Authentication 获取用户名目的。然而,这个对象是一个 User目的。如果我尝试获取 username从中我得到空值。我能以某种方式设法制作 Authority 吗?对象 a Customer目的?还是我的 Customer 类必须扩展 User 类?

更新

更多细节:

我有我的用户类。它完全是自己编写的,不实现或扩展任何接口(interface)/类。我没有实现 UserDetailsS​​ervice 的类。 <form-login>我的一部分 applicationContext-security.xml看起来像这样:

<form-login login-page="/index.htm"
authentication-success-handler-ref='authSuccHandler'
authentication-failure-handler-ref='authFailureHandler'
default-target-url='/library/login.htm'
always-use-default-target='true'/>

他们 authSuccHandler看起来像这样:(必要的 bean 定义已经到位)

public class PostSuccessfulAuthenticationHandler extends  SimpleUrlAuthenticationSuccessHandler 
{
@Autowired
private UserService userService;

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException
{
userService.trackUserLogin(authentication.getName()); //NullPointerException
super.onAuthenticationSuccess(request, response, authentication);
}
}

表单重定向到 j_spring_security_check

最佳答案

Authentication 不能是 User,因为它们不会相互继承。

如果您的 UserDetailsS​​ervice 生成自定义 UserDetails,您应该能够通过在 Authentication< 上调用 getDetails() 来获取它.

关于java - Spring Security - 身份验证的用户名在 AuthenticationSuccessHandler 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8328259/

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