nginx+tomcat反向代理下使用tomcat-redis-session-manager進行session共享中值得注意的一個問題

公司目前項目使用nginx反向代理+多個tomcat進行負載均衡,以前使用ip_hash策略進行session控制。近期有考慮再也不使用ip_hash策略,因此須要進行session共享。html

根據項目實際狀況,擬考慮使用開發配置比較簡單,應用比較普遍的tomcat-redis-session-manager方式進行session共享,具體設置請參考 http://www.cnblogs.com/interdrp/p/4056525.html前端

公司原來項目使用spring security框架進行安全控制,在測試的時候發現一個詭異的問題,在前端登陸的時候,自定義的session已經共享成功,可是登陸提交後老是跳轉到j_spring_security_check,security的content爲空,security並無建立和保存登陸後的session。nginx

發現一個問題,當自定義的session建立後,tomcat會調用tomcat-redis-session-manager將其序列化而後保存到redis上去,當使用request.getSession().setAttribute(key,value);設值的時候,若是value爲null,空對象,則會形成異常,且此異常並不在項目代碼中建立,難以追蹤到。redis

因此一旦使用tomcat-redis-session-manager方式進行session共享,項目代碼中在使用request.getSession().setAttribute(key,value)的時候,最好須要判斷一下value是否爲空對象。spring

相關文章
相關標籤/搜索