我有一個客戶類,其中包含所有帳戶信息(它不擴展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