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<String, Object> 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) { 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |