我有一个客户类,其中包含所有帐户信息(它不扩展Spring的userdetails.User类) 我试图在成功登录后执行一些操作(例如设置新的最后登录时间)。为了达到这个目的,我设置了一个自定义AuthenticationSuccessHandler
。Spring Security - 身份验证用户名在AuthenticationSuccessHandler中为空
在onAuthenticationSuccess
方法中,我尝试从Authentication
对象获取用户名。但是,此对象是User
对象。如果我尝试从它得到username
,我会得到空。 我能以某种方式设法使Authority
对象成为Customer
对象吗?或者,我的客户类是否必须扩展用户类?
更新
更多的细节:
我有我的User类。它是完全自行编写的,不实现或扩展任何接口/类。我没有实现UserDetailsService的类。我applicationContext-security.xml
的<form-login>
部分看起来是这样的:
<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'/>
Theh 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
能否请你加上你做什么具体配置,是非标准(例如UserDetailsService中,自定义过滤器,认证提供商等)的更多细节。要弄清楚你已经定制了什么,以及你如何覆盖默认的Spring Security实现类,这有点难。另外,请让我们知道您使用的是什么版本。 –
增加了一些细节。 – tschaei