0

While extending org.springframework.web.socket.server.support.DefaultHandshakeHandler, there is a possibility to access determineUser method, offering attributes like so:

package com.example.websocketchat.stomp_principal;

import org.springframework.http.server.ServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;

import java.security.Principal;
import java.util.Map;
import java.util.UUID;

public class CustomHandshakeHandler extends DefaultHandshakeHandler {

    @Override
    protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
        String uuid = UUID.randomUUID().toString();
        StompPrincipal stompPrincipal = new StompPrincipal(uuid);
        stompPrincipal.setUserName("??");
        return stompPrincipal;
    }
}

How do I pass those in stompClient using import { Client, over } from 'stompjs' ?
Below is my connect method using stompClient.connect

  connect: async (jwtToken: string) => {
    const csrfToken = await fetch('http://localhost:8080/csrf-token', {
      headers: {
        Authorization: `Bearer ${jwtToken}`,
      },
    })
      .then(response => response.json())
      .then(data => data.token);

    const socket = new WebSocket('ws://localhost:8080/websocket');
    const stompClient = over(socket);

    stompClient.connect(
      {
        Authorization: `Bearer ${jwtToken}`,
        'X-XSRF-TOKEN': csrfToken,
      },
      frame => {
        console.log('connected');
        if (frame) {
          set({
            stompClient,
            stompUserName: (frame.headers as { 'user-name': string })['user-name'],
          });
        }
      },
      err => console.log(err)
    );
  },

I have been told, that I should add them at ws URL like rdinary params like so:

const socket = new WebSocket('ws://localhost:8080/websocket?userName=user123')

However it doesn't work, how should I do this?

I'm using:
stompjs@2.3.3
springboot 3.0.6

Pioter88
  • 133
  • 1
  • 6

0 Answers0