webSocket 使用 HttpSession 的數據配置與寫法


1。前言

webSoket 無法獲取 HttpSession  ,使用就更談不上了 !!!

 

 

2解決過程

使用   configurator  注入即可

 

(1)

配置一個類

 1 package cn.cen2guo.clinic.websocket;
 2 
 3 
 4 import javax.servlet.http.HttpSession;
 5 import javax.websocket.HandshakeResponse;
 6 import javax.websocket.server.HandshakeRequest;
 7 import javax.websocket.server.ServerEndpointConfig;
 8 
 9 
10 /**
11  * 用於從websocket中獲取用戶session
12  */
13 public class HttpSessionConfigurator extends ServerEndpointConfig.Configurator  {
14 
15     @Override
16     public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
17         HttpSession httpSession = (HttpSession) request.getHttpSession();
18         sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
19     }
20 }

(2)websocket業務類注入   HttpSessionConfigurator.class

 

 (3)onOpen里面的額使用方法

可以用  config 來獲取 ,也可以以當前會話session來獲取  

測試截圖:

 

 

 3 . 經驗:

 當前會話session 都保存起來,這樣就可以對其他會話session進行操作了

擔心線程安全問題,可使用 ConcurrentMap<String, Map<String, List<Object>>> messageMap=new ConcurrentHashMap<>();  

當然,里面的泛型則根據需要自己定義  ,ConcurrentMap 的用法 與Map一樣,唯一區別就是自帶同步鎖,線程安全

 

 

在@OnOpen方法里 將當前會話session設為全局變量,於是,在其他方法里都可以使用session獲取  HttpSession   !!!

 

 

 

 

如 :@OnClose 方法里面 ,完美使用,

有些方法里面自帶當前會話session參數  ,那么既 可以使用 已經在@onOpen記錄的session  [this.session]  ,也可以使用該方法注入的session

 

 

 

 

 

 

.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM