在運行應用程序的多個負載平衡實例時,是否可以防止會話的併發修改?春季會話 - 防止會話的併發修改
上下文:多個tomcat,全部運行相同的應用程序。該應用程序使用spring會話將會話存儲在redis集羣中。負載均衡器將傳入的請求分發給其中一個tomcats(非粘性)。用戶點擊按鈕,tomcat 1非常緩慢地處理請求(性能問題或其他)。用戶再次點擊按鈕,tomcat 2更快並回覆成功。用戶轉到下一頁。 Tomcat 1完成第一個請求並覆蓋會話 - 所有正在進行的頁面的數據都將丟失。
解決方案是鎖定會話。從而tomcat 2可以檢測到併發修改並回復一個錯誤(比獲得不一致的狀態好得多)。
THX很多 AB
Thx很多Vedran。一些言論: 禁用按鈕將不會解決問題,因爲用戶仍然可以點擊「F5」,或者使用多個瀏覽器窗口。 我沒有找到一個合適的機制來處理任何SessionRepository我的問題 - 反正RedisOperationsSessionRepository絕對不解決問題。 使用CSRF保護標記是檢測併發修改的一個非常有趣的想法。我會試一試。 – user7252656