Spring 封装

pom.xml

<!-- websocket -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

HttpAuthInterceptor

package com.example.websocket;

import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.nio.charset.StandardCharsets;
import java.util.Map;

@Component
@Slf4j
public class HttpAuthInterceptor implements HandshakeInterceptor {
    /**
     * 握手前
     *
     * @param request    请求
     * @param response   响应
     * @param wsHandler  WebSocket处理器
     * @param attributes 用于传递信息的map,此处用于给session中放入用户信息
     * @return 是否通过
     */
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
        // 获得请求参数
        Map<String, String> paramMap = HttpUtil.decodeParamMap(request.getURI().getQuery(), StandardCharsets.UTF_8);
        if (paramMap.containsKey("token")) {
            // 放入属性域
            attributes.put("token", paramMap.get("token"));
            log.info("用户握手成功");
            return true;
        }
        return false;
    }

    /**
     * 握手后
     *
     * @param request   请求
     * @param response  响应
     * @param wsHandler WebSocket处理器
     * @param exception 异常
     */
    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
        System.out.println("握手结束");
    }
}

Websocket

WebsocketConfig

最后更新于