今天有位朋友問了個問題,大緻是:tomcat下兩個Java web,一個是商城,一個是直播,從商城登入後,再跳轉到直播,發現處于非登入狀态。
将session抽出來成一個session服務,統一通過該服務操作session。
tomcat内部用會話管理器擷取會話時周遊所有context内的會話。
重寫擷取session方法即可。
找了源碼發現已經支援類似周遊所有context内的會話的形式,首先擷取session時,如果cressContext屬性為true,則會在擷取不到時嘗試周遊所有context是否存在該sessionid,如果存在則在本context根據sessionid建立自己的session對象。
context(web應用)擷取跨應用session時通過類似下面操作擷取:
這是因為request會根據cookies的sessionid擷取到session對象,這時不會報找不到,因為前面已經根據其他sessionid建立了一個session對象,然後getContext操作會擷取對應url的context,接着進行會話操作。
點選訂購作者《Tomcat核心設計剖析》
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVM5cUY2w2RhZDZtJGasNjW1ZkMkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM0kzN1kTM5AzMwUDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)