我是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. 春季安全登錄成功後調用bean?
- 6. 添加事件偵聽器,以形成由事件監聽器
- 7. 添加事件監聽器
- 8. 春季安全第一次登錄失敗,第二次登錄成功
- 9. 春季安全第一次登錄失敗,第二次登錄成功
- 10. 春季安全預認證/登錄
- 11. 春季安全用戶請求登錄
- 12. 春季安全阿賈克斯登錄
- 13. 春季安全登錄外部鏈接
- 14. 春季安全自動登錄registeration
- 15. 春季安全登錄頁面超時
- 16. 登錄註銷春季安全用例
- 17. 春季安全和角js ajax登錄
- 18. 春季安全自定義登錄
- 19. 春季安全 - 登錄架構
- 20. 春季安全登錄註銷的URI
- 21. 春季安全只允許oauth登錄
- 22. 春季安全登錄不能與oracle
- 23. 春季安全登錄/註銷問題
- 24. 春季安全無形體登錄
- 25. 春季安全登錄CustomUserDetailsService
- 26. 春季安全登錄頁面 - 圖像
- 27. 春季安全登錄返回404
- 28. 春季安全登錄/註銷問題
- 29. 春季安全登錄頁面?
- 30. 春季安全角色訪問,登錄
謝謝!剛剛找到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