我在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. 會話過期後Java仍然爲Request.isRequestedSessionValid()
- 3. ConstraintViolationException後Hibernate會話失效
- 4. PHP會話超時爲0,但會話仍然過期
- 5. 會話變量在兩個不同的控制器之間仍然爲空
- 6. oc4j會話失效
- 7. facebook會議登錄後仍然存在應用會話
- 8. 會話失效和登錄會話失效asp.net webform
- 9. 使用會話,仍然是ajax?
- 10. 爲什麼「request.getUserPrincipal()。getName()」有時會返回空字符串?
- 11. ASP.Net C#對象保存到會話後仍然存在一次
- 12. 註銷後第二個活動仍然保留在會話中
- 13. Passport.js會話自行失效
- 14. 什麼是會話失效?
- 15. JSP會話不爲空
- 16. 通過檢查,如果不爲空仍然分配爲空
- 17. Rails - 驗證所有空白爲false但仍然不能爲空?
- 18. Errno :: ENOSPC在空間增加後仍然會發生
- 19. 甚至在空字符後仍然會打印垃圾值
- 20. 關閉後連接仍然空閒
- 21. 插入後NHibernate仍然會更新
- 22. 會話變量返回null ...後幾個回發..雖然用戶會話有效
- 23. 更新後會話對象爲空
- 24. Facebook - 手機重啓後會話爲空
- 25. pgAgent在恢復後不會失效
- 26. 如果BufferedWriter仍然打開,爲什麼BufferedReader會失敗?
- 27. 會話圖爲空
- 28. 在實現UITestPropertyProvider之後,AccessibleName仍然不是有效的SearchProperty
- 29. NSTimer不會失效
- 30. 雖然WiFi仍然開啓,但Android仍然失去連接