38 lines
1.5 KiB
Java
38 lines
1.5 KiB
Java
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<String, Object> 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) {}
|
|
}
|