Spring 4.2.0 - 如何使用SimpUserRegistry

时间:2015-08-25 18:13:06

标签: spring spring-mvc spring-websocket

根据Spring 4.2.0文档,第5.5项,我正在尝试使用SimpUserRegistry来获取连接到websockets / STOMP端点的用户列表......但我在Spring上很新,我只是不喜欢知道在哪里/如何使用这个课程。你能给我一个例子或指出我正确的方向吗?

2 个答案:

答案 0 :(得分:7)

只需注入SimpUserRegistry作为依赖项。以下是打印所有已连接用户的用户名的示例:

@Autowired private SimpUserRegistry userRegistry;

public void printConnectedUsers() { 
    userRegistry.getUsers().stream()
                    .map(u -> u.getName())
                    .forEach(System.out::println);
}

答案 1 :(得分:2)

刚刚与一个类似的问题作斗争 - 以为我会把这些发现留给未来的旅行者。

我尝试使用包含上述自动连接WebSocketSecurityInterceptor的{​​{1}}来决定应该发送哪些消息。这涉及在SimpUserRegistry中设置拦截器;因为我需要Autowired字段,所以我不能像正常一样使用拦截器的构造函数。

WebSocketConfig

@Component
public class WebSocketSecurityInterceptor implements ChannelInterceptor {

    @Autowired
    private SimpUserRegistry simpUserRegistry;

    ...other stuff
}

不幸的是,在上面,由于初始化顺序的一些怪癖,当您将类自动装入 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer { @Autowired private WebSocketSecurityInterceptor webSocketSecurityInterceptor; @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/stream"); config.configureBrokerChannel().setInterceptors(webSocketSecurityInterceptor); } 时,WebSocketConfig不再运行,因此不会添加拦截器。

我们能找到的唯一方法就是在应用程序环境中大肆翻找以获得正确的bean:

configureMessageBroker(MessageBrokerRegistry config)