38 lines
1.4 KiB
Java
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
|
|
}
|
|
}
|