2011-05-20 76 views
1

我正在使用Spring Security進行驗證的Spring MVC應用程序。我想在登錄時做一些工作,並在多個地方看到這個建議(包括enter link description here),以便使用Application Listener來實現此目的。我已經先行一步,並實現它是這樣:應用程序監聽器沒有收到事件通知

@Named 
public class AccountLoginListener implements ApplicationListener<AuthenticationSuccessEvent> { 

    @Inject 
    AccountService accountService; 

    @Override 
    public void onApplicationEvent(AuthenticationSuccessEvent event) { 
     Account account = (Account) event.getAuthentication().getDetails(); 
     ... 
     accountService.saveAccount(account); 
    } 

} 

不幸的是,AuthenticationSuccessEvent似乎並沒有被捕獲得到,當我調試,該onApplicationEvent函數永遠不會被調用。我沒有在XML文件中做任何額外的配置,但我認爲這不應該有必要這樣做。我錯過了一些配置,還是我在做其他的錯誤?

謝謝!

idbentley

+0

你是如何創建實例化這個bean/listener的? – 2011-05-20 15:01:52

+0

我的spring上下文有一個'',它的基類包含在這個類中。 – idbentley 2011-05-20 15:04:21

+0

'@ Named'註解是什麼類型? – 2011-05-20 15:05:50

回答

2

如果您正在使用Spring安全3,你應該實現AuthenticationSuccessHandler,然後配置這個bean在你的應用程序上下文。

+1

感謝這個大衛 - 我會看看有什麼區別。我的問題最終是因爲我們的應用程序中的web上下文與spring上下文不同。 – idbentley 2011-05-24 20:27:21

2
public class AuthenticationSuccessListener 
    implements ApplicationListener<InteractiveAuthenticationSuccessEvent> { 

    @Inject 
    AccountService accountService; 

    @Override 
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event) { 
     Account account = (Account) event.getAuthentication().getDetails(); 
     accountService.saveAccount(account); 
    } 
} 
相關問題