一、前言
本文:https://www.cnblogs.com/Twobox/p/10361712.html
參考:https://www.cnblogs.com/diewufeixian/p/4221747.html
自己設計SSO系統的時候,需要考慮多個客戶網站與中心網站的Session有效期同步問題。
即需要滿足:
客戶端網站Session剩余失效時間必須短於中心網站。
中心網站Session失效的時候,客戶端網站必須全部聲明失效。
場景:
用戶第一次在中心網站登陸的時候會創建並刷新 中心網站 的Session過期時間。但隨后就去訪問子網站,后面可能就不會再訪問中心網站。
故:用戶訪問某子網站時,子網站通知中心網站刷新Session過期時間。
子網站畢竟是別人的網站,中心網站無法保證子網站會及時通知自己刷新Session過期時間。所以也可能存在某子網站Session待過期時間長於中心網站。
故:為了安全保證並瞞住上面兩個要求。監聽器監聽中心網站某Session失效后,隨后通知相關子網站強制聲明Session失效。
二、開始
按照優先級,從小到大介紹:
① 在web容器中設置(以tomcat為例)
tomcat/conf/web.xml 下 12%左右的位置。
單位為分鍾!!!
tomcat默認session超時時間為30分鍾,負數或0為不限制session失效時間。
② 在程的web.xml中設置
單位為分鍾!!!
③ 過java代碼設置
session.setMaxInactiveInterval(30*60);
單位為 秒!!!!!!
即在沒有活動30分鍾后,此session將失效。
三種方式優先等級:1 < 2 < 3
三、session監聽器
當session因為各種原因失效后,監聽器就可以監聽到,然后執行監聽器中定義好的程序就可以了。
監聽器類為:HttpSessionListener類,有sessionCreated和sessionDestroyed兩個方法
自己可以繼承這個類,然后分別實現
sessionCreated指在session創建時執行的方法
sessionDestroyed指在session失效時執行的方法
例子:
1 public class OnlineUserListener implements HttpSessionListener{ 2 public void sessionCreated(HttpSessionEvent event){ 3 // session創建后 4 HttpSession session=event.getSession; 5 // 有了 session后,巴拉巴拉巴拉一頓操作。 6 } 7 8 public void sessionDestroyed(HttpSessionEvent event){ 9 // session 立馬銷毀前 10 HttpSession session=event.getSession; 11 // 有了 session后,巴拉巴拉巴拉一頓操作。 12 } 13 } 14 }
四、后言
然后就可以胡作非為了。
2019-02-11 14:14:48