避免在 Spring WebSocket 中使用 /user 前缀
如果你选择不使用 Spring Security,但仍然想发送特定用户的消息,可以使用以下方法避免 /user 前缀:
后端改动
-
更改消息发送方式
从
convertAndSendToUser方法更改为convertAndSend方法,并将用户ID添加到队列名称中。// 原先的代码 // messagingTemplate.convertAndSendToUser(receiverId.toString(), "/queue/messages", ...); // 更改后的代码 messagingTemplate.convertAndSend("/queue/messages/" + receiverId, ...);
前端改动
-
直接订阅特定用户的队列
根据你的需要设置
userId,并订阅对应的队列。function connect() { const userId = 1; // 按需设置 const socket = new SockJS('http://localhost:8080/ws-stomp'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { console.log('Connected: ' + frame); stompClient.subscribe('/queue/messages/' + userId, function (messageOutput) { console.log('Received message:', messageOutput.body); showMessageOutput(JSON.parse(messageOutput.body).content); }); }); }
这些改动确保了每个用户都有他们自己的消息队列,并只在发送消息给他们时接收到消息。这避免了使用 /user 前缀,同时仍然保证了消息的正确路由。

被折叠的 条评论
为什么被折叠?



