我正在使用Spring Websocket(4.1.4版本)并使用@SendToUser向当前用户发送消息。但我有一个问题。我们是一个多租户平台,其中用户名不是唯一的,而是用户名和租户ID的组合是唯一的。 DefaultUserSessionRegistry
将地图从用户名保存到会话ID列表:
private final ConcurrentMap<String, Set<String>> userSessionIds = new ConcurrentHashMap<String, Set<String>>();
在我的方案中不起作用。那么有没有一种方法可以插入自定义UserSessionRegistry
实现?
答案 0 :(得分:2)
代码搜索后,问题似乎与此line有关。 我发现这个类是由WebSocketMessageBrokerConfigurationSupport扩展的,它由@Configuration类(DelegatingWebSocketMessageBrokerConfiguration)扩展,因此您可以尝试自己扩展它,如下例所示:
我没有时间对此进行验证,但如果您的问题只是UserSessionRegistry实现,那么这可能是覆盖@Bean方法的方法。
更新
在进一步挖掘之后,我找到了整个流程的真正切入点:搜索DefaultHandshakeHandler类,使用determineUser方法(由于得分低,我无法添加更多链接)