我需要知道何時tomcat接受使用領域認證的登錄給定的上下文。我一直在尋找可能的偵聽器(ServletContextListener和ServletContextAttributeListener),但不知道如何在登錄時發出通知。在使用多個上下文的tomcat單點登錄時,這也應該起作用。有任何想法嗎?收聽tomcat領域認證事件
2
A
回答
7
不幸的是,沒有標準/抽象的方式來使用Servlet API掛鉤它。您需要編寫特定於應用程序服務器的邏輯,或者實現一個全局過濾器,每次都會檢查HttpServletRequest#getUserPrincipal()
。例如:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
HttpServletRequest request = (HttpServletRequest) req;
Principal user = request.getUserPrincipal();
HttpSession session = request.getSession(false);
if (user != null && (session == null || session.getAttribute("user") == null)) {
request.getSession().setAttribute("user", user);
// First-time login. You can do your intercepting thing here.
}
chain.doFilter(req, res);
}
1
如果您有權訪問服務器配置,則可以嘗試編寫一個LifecycleListener(http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/LifecycleListener.html),這是使用服務器配置的(請參閱您的版本的tomcat服務器配置文檔)。
不知道它是否會做的伎倆,但一個好地方檢查。
祝你好運。
相關問題
- 1. Grails領域類事件聽者
- 2. oauth2的Tomcat領域?
- 3. 收聽missingTranslation事件
- 4. 收聽ActivityManager事件?
- 5. 收聽GPIB事件
- 6. 收聽WM_SYSCOMMAND事件
- 7. Windows IIS 7.5上的PHP領域認證
- 8. 驗證領域
- 9. 驗證領域
- 10. 驗證領域
- 11. 驗證領域
- 12. 驗證領域
- 13. Tomcat - 沒有領域的SSO?
- 14. 領域刪除監聽器
- 15. Python:收聽Pusher API事件
- 16. 從BHO收聽HTML事件
- 17. 收聽keyPressed事件,剃刀
- 18. 綁定/收聽事件
- 19. 從iframe事件中收聽
- 20. angularjs收聽dom事件
- 21. 如何收聽WifiMonitor事件
- 22. 收聽KineticJS中的事件
- 23. 收聽聊天事件
- 24. 僅收聽localStorage.removeItem()事件
- 25. JQUERY收聽點擊事件
- 26. 在JMS中收聽收聽確認
- 27. 收聽所有請求Tomcat
- 28. tomcat webapp認證
- 29. 停止收聽事件監聽器中的事件
- 30. JDO不取收集部件領域
這看起來正是我所需要的。退出如何?也許看着會話到期事件? – rmarimon 2009-11-13 00:12:00
如果'HttpSession#invalidate()'被用於註銷,那麼你確實可以鉤住'HttpSessionListener#sessionDestroyed()'並檢查'user'屬性是否存在。 – BalusC 2009-11-13 02:32:41
我使用'httpRequest.getSession(false)'來防止浪費會話的創建。 – 2014-06-06 03:07:57