首页 > 解决方案 > 使用rabbitmq自定义spring websocket安全

问题描述

我正在使用 websocket 使用rabbitmq 像消息代理一样推送通知。在控制器中,我使用 SimpMessageTemplate 通过用户的昵称转换AndSendToUser 消息

@PostMapping("/{nickName}/notification")
public void send(@PathVariable String nickName,
                 @RequestBody NotificationRes notificationRes) {
        messagingTemplate.convertAndSendToUser(nickName, "/exchange/amq.direct/notification", notificationRes);
    }

我通过使用 JWT 授权用户并在用户开始连接时将用户设置为 StompHeaderAccessor 进行了一些配置。

Spring 安全消息传递当前转换发送给用户。使用该端点,spring 会将其转换为 /exchange/amq.direct/notification-user{session_id}。而且 rabbitmq 会创建一个自动删除的队列。所以,如果我同时有 100 个连接。它将创建 100 个队列。我想自定义这个流程来创建一个队列,spring 将使用消息头让 spring 可以知道要向其发送消息的用户。

我做了一些关于 UserDestinationResolver 的研究,但我仍然不知道如何让 spring 可以处理 header 而不是像 ...-user {session_id} 这样的 url。@.@。这种情况我该怎么办?

标签: spring-bootrabbitmqspring-websocketspring-rabbitspring-messaging

解决方案


推荐阅读