我在websphere應用服務器7.0上部署了Web應用程序。用戶使用/ j_security_check登錄。當會話超時發生會話ivnvalidates但request.getUserPrincipal()仍然不爲空。我希望它應該是空的。如何清理用戶主體?會話失效後,request.getUserPrincipal()仍然不爲空
3
A
回答
3
我發現球文檔中的解決方案。
- 在管理控制檯中,單擊安全性>全局安全性。
- 在自定義屬性下,單擊新建。
- 在名稱字段中,輸入com.ibm.ws.security.web.logoutOnHTTPSessionExpire。
- 在Values字段中輸入true。
- 單擊應用並保存將更改保存到您的配置。
- 重新同步並重新啓動服務器。
2
要記住的關鍵是有效/無效HTTPSession與安全不一樣。
它們完全不同。
一旦您通過服務器驗證,您仍可以讓應用程序無需任何HTTPSession工作,如果你想。
一旦你被服務器認證,你會得到一個返回給你的瀏覽器的LTPA令牌,並且LTPA令牌被激活2小時(這是默認值)。
如果您的HTTP會話過期,不影響LTPA令牌,如果你不想做任何額外的事情。
您可以試試:ibm_security_logout會使LTPA令牌失效。
我想用更高版本的Servlet API,我們確實有一個適當的註銷操作可用,這將消除這種需要。
HTH
Manglu
3
除了Vadim提供的解決方案之外,我想分享兩個鏈接,它們描述了幾種替代解決方法,並解釋了造成這種看似相反的直觀操作模式的機制。
如果您在不同的應用程序之間使用SSO(單點登錄),那麼使用com.ibm.ws.security.web.logoutOnHTTPSessionExpire = true設置可能有一點缺點。該設置實質上使LTPA令牌無效。由於服務器上的安全緩存在超時時從LTPA令牌刷新,因此無效的LTPA將導致用戶對其餘應用程序的重新驗證(登錄)[1]。
在[2]中對問題9(與我們的問題似乎相同)的回答爲此問題的兩種替代解決方法提供了思路,您可以使用基於生命期和不活動狀態的servlet過濾器超時進行身份驗證。
[1]:Security Cache, LTPA Token, and Session Time Outs(需要登錄)
[2]:Q & A: Frequently asked questions about WebSphere Application Server security
相關問題
- 1. 會話失效後,它仍然活着,爲什麼?
- 2. 會話即使失效後仍存在
- 3. 會話過期後Java仍然爲Request.isRequestedSessionValid()
- 4. ConstraintViolationException後Hibernate會話失效
- 5. NHibernate - 刷新會話後仍然髒
- 6. SQLAlchemy:會話查詢在提交後仍然有效嗎?
- 7. 會話不會失效
- 8. Spring Security request.getUserPrincipal()始終爲空
- 9. request.getUserPrincipal()得到空
- 10. PHP會話超時爲0,但會話仍然過期
- 11. ImageView仍然爲空,findby後查看
- 12. oc4j會話失效
- 13. 會話變量在兩個不同的控制器之間仍然爲空
- 14. facebook會議登錄後仍然存在應用會話
- 15. 在調用session.invalidate後,Tomcat不會使會話失效()
- 16. PHP會話在銷燬/重置後不會失效
- 17. 會話失效和登錄會話失效asp.net webform
- 18. 春季安全刪除用戶 - 會話仍然有效
- 19. PHP會話超時,但AJAX調用仍然有效
- 20. JavaScript空檢查 - 值爲空,但檢查仍然失敗?
- 21. 爲什麼「request.getUserPrincipal()。getName()」有時會返回空字符串?
- 22. 檢查會話是否仍然存在
- 23. 使用會話,仍然是ajax?
- 24. 不爲空,然後」的foreach
- 25. 單元測試會話仍然返回null後Mocking
- 26. 註銷後第二個活動仍然保留在會話中
- 27. ASP.Net C#對象保存到會話後仍然存在一次
- 28. 後效果刪除仍然背景
- 29. java.lang.IllegalStateException:getAttributeNames:會話已經失效
- 30. 什麼是會話失效?