2

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}
});
Willi Mentzel
  • 27,862
  • 20
  • 113
  • 121
Ivan Vynogradov
  • 67
  • 2
  • 10

0 Answers0