環境:tomcat7,redis3.2.10
關於redis的安裝以及配置請自行搜索。
在每個tomcat實例中都需要做如下修改。
需要的jar:
1.jedis-2.2.1.jar
2.commons-pool2-2.4.2.jar
3.redis-session-manager.jar(這個jar名稱是自定義的)
*關於這個jar請移步github,獲取源碼自行編譯,此處作者是用gradle構建,需要在OS安裝gradle。或者修改成其它構建工具。
將以上jar添加到tomcat目錄下的 /lib文件夾中
2.需要做的修改。
修改conf/context.xml文件,添加和修改如下內容:
<!-- 這裏是禁用session本地持久化-->
<Manager pathname="" />
<!-- 這個類是在redis-session-manager.jar這個包中 -->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<!-- 這個類是在redis-session-manager.jar這個包中,下面的屬性需要大家自行修改,host默認localhost,port默認6379 ,database默認0,maxInactiveInterval默認30*60單位是秒-,password默認是null,有密碼請自行添加,->
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.50.129"
port="6379"
database="0"
password="abc123"
maxInactiveInterval="60"/>
注意:maxInactiveInterval這個參數會根據tomcat版本的不同而失效,在7.0.68版本及以上此字段失效,應改爲sessionMaxAliveTime,如果是這個字段需要修改對應的redis-session-manager中的源碼,
將getMaxInactiveInterval()方法全部修改成getSessionMaxAliveTime()
另外這個session共享的jar包中jedis版本較低,無法使用ssl,如果需要使用需要在redis-session-manager.jar中自行更新jedis版本,並在jedis連接池生成處自行編碼。我是給RedisSessionManager類增加了一個標誌位字段,來做的,這樣方便在xml文件中配置。
其中還有sessionPersistPolicies,這個字段使用來確定session持久策略,值有三種default,save_on_change,always_save_after_request,可以使用逗號分隔來指定多種會話持久策略。
以下是測試:
此測試是使用了tomcat自帶的頁面進行測試的,默認安裝或者解壓後,在webapps下面會有相應的頁面;
默認的seesion失效是30*60秒,如果測試可以修改maxInactiveInterval(或者sessionMaxAliveTime)這個字段值,默認單位秒,或者修改tomcat根目錄下conf/web.xml文件,如果有web項目可以在web.xml中重新配置失效時間。(如果你的項目需要動態的session失效時間的話,需要修改共享jar包的源碼)