Files
qchat/src/main/java/de/w665/testing/config/UsernameHandshakeInterceptor.java
Maximilian Walz adb8ef9c83 Init
2025-09-16 23:05:31 +02:00

38 lines
1.4 KiB
Java

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<String, Object> 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<String> 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
}
}