我是Spring Security的新手。我如何添加一个事件监听器,这个监听器将在用户成功登录时被调用?此外,我需要在此侦听器中获得某种唯一的会话ID,该ID应该可以继续使用。我需要这个ID来与另一台服务器同步。春季安全:添加“成功登录事件监听器”
32
A
回答
41
您需要定义一个实现了ApplicationListener的Spring Bean。
然后,在你的代码,做这样的事情:
public void onApplicationEvent(ApplicationEvent appEvent)
{
if (appEvent instanceof AuthenticationSuccessEvent)
{
AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ....
}
}
然后,在你的applicationContext.xml文件,只是定义的bean,它会自动开始接收事件:)
10
Grails中使用Spring安全插件,您可以在Config.groovy中做到这一点:
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->
def session = SecurityRequestHolder.request.getSession(false)
session.myVar = true
}
21
类似菲尔的回答,但修改以泛型考虑:
public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(final AuthenticationSuccessEvent event) {
// ...
}
}
38
AuthenticationSuccessEvent的问题是它不会在记住我登录时发布。如果您使用记忆式身份验证,请改用InteractiveAuthenticationSuccessEvent,它适用于正常登录以及记住我登录。
@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
{
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ...
}
}
相关问题
- 1. 春季安全登录/注销登录
- 2. 春季目录监听
- 3. 春季安全第一次登录失败,第二次登录成功
- 4. 春季安全阿贾克斯登录
- 5. 春季安全只允许oauth登录
- 6. 春季安全角色访问,登录
- 7. 春季安全登录页面?
- 8. 春季安全无形体登录
- 9. 春季安全预认证/登录
- 10. 春季安全登录注销的URI
- 11. 春季安全和角js ajax登录
- 12. 春季安全 - 登录架构
- 13. 春季安全登录/注销问题
- 14. 春季安全LDAP - 登录问题(ProviderNotFoundException)
- 15. 春季安全用户请求登录
- 16. 在登录前添加监听器
- 17. 春季安全 - 春季不检查isAccountNonLocked为UserDetails正确登录
- 18. 春季安全不打成功authtication
- 19. 登录功能 - 如何为滚动事件开发监听器?
- 20. jquery插件添加事件监听器
- 21. 春季网络安全:成功登录后无法访问页面
- 22. Symfony添加事件监听器
- 23. 向按钮添加事件监听器
- 24. 捆绑添加事件监听器
- 25. TinyMCE - 添加事件监听器问题
- 26. 添加事件监听器时出错
- 27. 添加事件监听器在VueJS 2
- 28. 春季安全
- 29. 春季安全加密MD5
- 30. Grails和ACEGI安全插件 - 如何阻止从安全事件监听器中登录?
谢谢!刚刚找到AuthenticationSuccessEvent,但试图找出如何注册一个监听器。 – axk 2008-10-08 12:36:35
他询问的会话ID如何? – siebmanb 2015-02-26 10:28:29
@siebmanb只需向侦听器添加“@Autowired HttpSession会话”即可。 Spring将注入一个自动委托给更正会话的代理。 – 2016-02-17 22:43:11