package de.w665.testing.config; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeInterceptor; import java.net.URI; import java.util.List; import java.util.Map; public class UsernameHandshakeInterceptor implements HandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) { URI uri = request.getURI(); String query = uri.getQuery(); if (query != null) { for (String pair : query.split("&")) { String[] kv = pair.split("=", 2); if (kv.length == 2 && kv[0].equals("token")) { attributes.put("token", kv[1]); } } } // Also check headers (not used by SockJS handshake, but harmless) List header = request.getHeaders().get("X-Auth-Token"); if (header != null && !header.isEmpty()) { attributes.put("token", header.getFirst()); } return true; } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { // no-op } }