I try to implement sending message to a specific user via Spring WebSocket.
Method from controller
simpMessagingTemplate.convertAndSend("/user/" + username + "/queue/messages", messageDto);
But how to get username? As I searched for that need to add DefaultHandshakeHandler to websocket endpoint
I've added:
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/chat" allowed-origins="*">
<websocket:handshake-handler ref="customHandler"/>
<websocket:handshake-interceptors>
<bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
</websocket:handshake-interceptors>
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic, /queue" />
public class CustomDefaultHandshakeHandler extends DefaultHandshakeHandler {
@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
But attributes is null
.....
return principal;
}
}
For example here: Sending message to specific user using spring
String name = (String)attributes.get("name");
But attributes are empty(null). What should I do to get username attribute? frontend use Angular4 and stomp over WebSocket service
this.stomp.configure({
host: AppSettings.WEBSOCKET_HOST + '/chat',
headers: {'username': 'test'},
queue:{'init':false}
});