针对多租户场景的Spring Web套接字实现中的自定义UserSessionRegistry?

时间:2015-02-02 06:38:29

标签: spring-websocket

我正在使用Spring Websocket(4.1.4版本)并使用@SendToUser向当前用户发送消息。但我有一个问题。我们是一个多租户平台,其中用户名不是唯一的,而是用户名和租户ID的组合是唯一的。 DefaultUserSessionRegistry将地图从用户名保存到会话ID列表:

private final ConcurrentMap<String, Set<String>> userSessionIds = new ConcurrentHashMap<String, Set<String>>();

在我的方案中不起作用。那么有没有一种方法可以插入自定义UserSessionRegistry实现?

1 个答案:

答案 0 :(得分:2)

代码搜索后,问题似乎与此line有关。 我发现这个类是由WebSocketMessageBrokerConfigurationSupport扩展的,它由@Configuration类(DelegatingWebSocketMessageBrokerConfiguration)扩展,因此您可以尝试自己扩展它,如下例所示:

https://github.com/arawn/overview-of-spring4/blob/master/src/main/java/jco/conference/oxquiz/WebSocketConfig.java

我没有时间对此进行验证,但如果您的问题只是UserSessionRegistry实现,那么这可能是覆盖@Bean方法的方法。

更新

在进一步挖掘之后,我找到了整个流程的真正切入点:搜索DefaultHandshakeHandler类,使用determineUser方法(由于得分低,我无法添加更多链接)