应用程序监听器没有收到事件通知
问题描述:
我正在使用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
答
如果您正在使用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);
}
}
你是如何创建实例化这个bean/listener的? – 2011-05-20 15:01:52
我的spring上下文有一个'',它的基类包含在这个类中。 –
idbentley
2011-05-20 15:04:21
'@ Named'注解是什么类型? – 2011-05-20 15:05:50