【问题标题】:Spring Websocket Stomp handle CONNECT frameSpring Websocket Stomp 句柄 CONNECT 框架
【发布时间】:2015-08-30 02:04:24
【问题描述】:

有没有办法在Spring中拦截STOMPCONNECT框架,在某些情况下拒绝呢? 拦截本身可以使用SessionConnectEvent 完成,但我想根据标头允许或拒绝连接。我不能在SessionConnectEvent 监听器中做到这一点。

【问题讨论】:

    标签: spring stomp spring-websocket


    【解决方案1】:

    如果我们查看StompSubProtocolHandler 代码,我们会看到:

    try {
        SimpAttributesContextHolder.setAttributesFromMessage(message);
        if (this.eventPublisher != null) {
            if (StompCommand.CONNECT.equals(headerAccessor.getCommand())) {
                publishEvent(new SessionConnectEvent(this, message, user));
            }
    ........
        outputChannel.send(message);
    }
    

    因此,CONNECT 帧不仅作为SessionConnectEvent 发出,而且还发送到clientInboundChannel

    因此,您需要满足您的要求,只需提供一个自定义 ChannelInterceptorpreSend 实现并将其注册为覆盖 WebSocketMessageBrokerConfigurer.configureClientInboundChannel

    【讨论】:

    • 我之前尝试过ChannelInterceptor,但看起来CONNECT 帧没有被截获......可能我做错了什么。阅读您的答案后,我再次尝试并成功了。谢谢你。我不喜欢ChannelInterceptor 的唯一原因是它在每一帧上都被调用,而我只需要拦截CONNECT 帧。无论如何,该解决方案符合我的要求。
    猜你喜欢
    • 2016-05-06
    • 2020-06-17
    • 2016-06-28
    • 2018-05-02
    • 2022-12-15
    • 2018-01-16
    • 1970-01-01
    • 2017-05-07
    • 2019-04-14
    相关资源
    最近更新 更多