package com.matrix.core.interceptor; import com.matrix.core.tools.LogUtil; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; import java.util.Map; /** * * @ClassName: MyWebSocketInterceptor * @Description: 创建握手 此类用来获取登录用户信息并交由websocket管理 * @author jyy * @date 2017年9月26日 上午10:31:30 */ /** * HandshakeInterceptor WebSocket握手请求的拦截器. 检查握手请求和响应, 对WebSocketHandler传递属性 */ public class WebSocketInterceptor implements HandshakeInterceptor { /** * 在握手之前执行该方法, 继续握手返回true, 中断握手返回false. 通过attributes参数设置WebSocketSession的属性 */ @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { if (request instanceof ServletServerHttpRequest) { String userId = ((ServletServerHttpRequest) request).getServletRequest().getParameter("userId"); attributes.put("userId", userId); LogUtil.info("用户建立连接:userId=" + userId); } return true; } /** * 在握手之后执行该方法. 无论是否握手成功都指明了响应状态码和相应头. */ @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { } }