WebSocketHandshakeInterceptor.java 1.48 KB
package com.infoloop.tianting.intercepter;

import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.convert.Convert;
import com.infoloop.tianting.constant.CommonConstants;
import com.infoloop.tianting.enums.LoginSourceEnum;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.util.StringUtils;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;

@SuppressWarnings("all")
public class WebSocketHandshakeInterceptor implements HandshakeInterceptor {

    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
        final var authorization = request.getHeaders().getFirst(CommonConstants.AUTHORIZATION);
        if (StringUtils.isEmpty(authorization)) {
            return false;
        }
        final var loginSource = Convert.toInt(StpUtil.getExtra(CommonConstants.LOGIN_SOURCE));
        final var loginSourceEnum = LoginSourceEnum.getByValue(loginSource);
        attributes.put(CommonConstants.USER_TYPE, loginSourceEnum.getUserType().name());
        attributes.put(CommonConstants.USER_ID, StpUtil.getLoginIdAsString());
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
    }
}