package com.krylov.refound.util; import com.krylov.refound.security.JwtService; import com.krylov.refound.service.UserService; import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; @Component @RequiredArgsConstructor public class WsHandshakeInterceptor implements HandshakeInterceptor { private final JwtService jwtService; private final UserService userService; @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) { if (request instanceof ServletServerHttpRequest servletRequest) { String token = servletRequest.getServletRequest().getParameter("token"); if (token != null && jwtService.isTokenValid(token)) { String login = jwtService.extractLogin(token); Long userId = userService.getUserIdByLogin(login); attributes.put("userId", userId); return true; } } return false; // отклонить подключение без валидного токена } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {} }