【问题标题】:Spring websocket with stomp security - every user can subscribe to any other users queue?具有 stomp 安全性的 Spring websocket - 每个用户都可以订阅任何其他用户队列?
【发布时间】:2014-07-09 19:35:08
【问题描述】:

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

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

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

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

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

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

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

谢谢!

我的配置类:

@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();
}

}

【问题讨论】:

    标签: java spring spring-security websocket stomp


    【解决方案1】:

    检查similar question:您必须使用 Spring Security 通过 HTTP 对用户进行身份验证,然后使用 SimpMessageTemplate.convertAndSendToUser() 方法向用户发送消息。

    【讨论】:

    • 但这并没有真正的帮助。当您使用SimpMessageTemplate.convertAndSendToUser 时,如果您查看代码,它实际上只是在'/user/{username}' 前面加上前缀,然后使用SimpMessageTemplate.convertAndSend 方法。它实际上并没有解决安全问题。
    • 是的,确实如此:这是一个特殊的队列,其中用户的唯一 sessionId 被附加到目的地并被代理透明地删除。试一试并验证只有始发用户能够接收那里发送的消息:所有其他客户端都没有。
    • 在我的示例中查看更多详细信息和代码:也许我遗漏了一些东西stackoverflow.com/questions/25004081/… |如果你是对的,我会把我的问题当作重复的。
    • 好的,我已经添加了一个答案,如果它解决了问题,请告诉我,如果是,请接受它!
    【解决方案2】:

    你可以有两种选择。

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

      convertAndSendToUser 不适用于代理中继。

    See org.springframework.messaging.simp.user packages source



    默认用户前缀为“/user/”。 你可以用 config.setUserDestinationPrefix() 来改变它





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

    方法:

  • 配置ClientInboundChannel
  • 配置ClientOutboundChannel
  • 【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2016-11-09
      • 1970-01-01
      • 2012-11-29
      • 2018-10-31
      相关资源
      最近更新 更多