WebsocketConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
@Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator{
/* 修改握手,就是在握手协议建立之前修改其中携带的内容 */
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
HttpSession httpSession = (HttpSession)request.getHttpSession();
if (httpSession != null) {
// 读取session域中存储的数据
sec.getUserProperties().put(HttpSession.class.getName(),httpSession);
}
super.modifyHandshake(sec, request, response);
}
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
WebsocketListener.java
import org.springframework.stereotype.Component;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Component
public class WebsocketListener implements ServletRequestListener{
@Override
public void requestInitialized(ServletRequestEvent sre) {
HttpSession session = ((HttpServletRequest) sre.getServletRequest()).getSession();
}
public WebsocketListener(){}
@Override
public void requestDestroyed(ServletRequestEvent arg0) {}
}
Websocket.java
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpSession;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.*;
@ServerEndpoint(value = "/websocket",configurator = WebSocketConfig.class)
@Component
public class WebSocket {
private Session session;
@OnOpen
public void onOpen(Session session,EndpointConfig config){
HaigeSatContext.getInstance().getOnlineWebSocketSessions().add(session);
System.out.println("-------------websocket open--------------");
HttpSession httpSession= (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
String httpSessionId = httpSession.getId();
System.out.println("httpSessionId:"+httpSessionId);
//此处省略使用sessionId构建hashMap集合存储websocket Session
}
@OnClose
public void onClose(Session session){
System.out.println("-------------websocket close--------------");
}
@OnMessage
public void OnMessage(String message, Session session){
System.out.println("-------------recv message--------------");
System.out.println("message:"+message);
}
@OnError
public void onError(Session session, Throwable error) {
System.out.println("---------------websocket error-------------------------");
}
}
以上即为websocket获取HttpSession过程,下一篇实现普通类中获取Httpsession来获取对应的websocket Session。