应用程序监听器没有收到事件通知

应用程序监听器没有收到事件通知

问题描述:

我正在使用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

如果您正在使用Spring安全3,你应该实现AuthenticationSuccessHandler,然后配置这个bean在你的应用程序上下文。

+1

感谢这个大卫 - 我会看看有什么区别。我的问题最终是因为我们的应用程序中的web上下文与spring上下文不同。 – idbentley 2011-05-24 20:27:21

public class AuthenticationSuccessListener 
    implements ApplicationListener<InteractiveAuthenticationSuccessEvent> { 

    @Inject 
    AccountService accountService; 

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