具有stomp安全性的Spring websocket - 每个用户都可以订阅任何其他用户队列?

2024-01-21

我创建了一个简单的应用程序,使用 spring 4 的 websockets 机制。 我在我的应用程序中使用 activemq 代理。

在我的简单测试中,我为名为“Alejando”的用户创建 10 条消息 (user/alejandro/queue/greetings)

当我使用“Alejando”登录并订阅该队列时:

  stompClient.subscribe('/user/alejandro/queue/greetings', function(greeting){
                  showGreeting(JSON.parse(greeting.body).content);
  }); 

我确实收到了为 alejandro 查询的所有 10 条消息。

问题是,当我使用名为“evilBart”的不同用户登录并订阅 alejandro 队列时,我也会收到消息吗?

我该如何为此加强安全性?我希望用户只能订阅它自己的队列。

Thanks!

我的配置类:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableStompBrokerRelay("/queue/","/topic","/user/");     
    config.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/hello").withSockJS();
}

}

您可以采取两种选择。

  1. 只需从 config.enableStompBrokerRelay 中删除“/user/”即可。 Spring消息会自动添加前缀。

    ConvertAndSendToUser 不适用于代理中继。

请参阅 org.springframework.messaging.simp.user 包源 https://github.com/spring-projects/spring-framework/tree/master/spring-messaging/src/main/java/org/springframework/messaging/simp/user



默认用户前缀是“/user/”。 您可以使用 config.setUserDestinationPrefix() 更改它





2.重写两个方法,从ChannelInterceptor中处理

方法:

  • 配置客户端入站通道
  • 配置客户端出站通道
  • 本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    具有stomp安全性的Spring websocket - 每个用户都可以订阅任何其他用户队列? 的相关文章

    随机推荐