【问题标题】:Stomp Interceptor not working跺脚拦截器不工作
【发布时间】:2017-03-03 10:13:34
【问题描述】:

我正在使用 Spring WebSockets。它运作良好,但我现在有一个案例,我需要在将消息发送到 Web 客户端之前对其进行修改。

因此我创建了以下拦截器:

@Component
public class StompMappingInterceptor extends ChannelInterceptorAdapter {

  @Override
  public Message<?> preSend(Message<?> message, MessageChannel channel) {
        message = MessageBuilder.withPayload(modifyMessage(message))
                .copyHeaders(message.getHeaders())
                .build();
        return message;
    ...
}

modifyMessage()应该使用MappingJackson2MessageConverter,但是为了测试,我根本没有修改消息:

private Message<?> modifyMessage(Message<?> message) {
    return message;
}

但是,Webclient 永远不会收到该消息。

当我将preSend() 方法更改为:

@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
  return message;
}

然后它运行良好,所以这似乎是我的 preSend() 方法和我创建新消息的方式的问题。我做错了什么?

【问题讨论】:

    标签: java stomp spring-websocket stomp-websocket


    【解决方案1】:

    新消息必须按如下方式创建:

    @Override
    public Message<?> preSend(Message<?> message, MessageChannel channel) {
    
        Message<?> newMessage = MessageBuilder.createMessage(modifyMessage(message),
        headerAccessor.getMessageHeaders());
        return message;
        ...
    }
    

    不同的是,这种方式的消息头不包含以下字段:

    • 身份证
    • 内容类型
    • 时间戳

    由于某种我不知道的原因,这阻止了 Web 客户端接收消息。

    【讨论】:

      猜你喜欢
      • 2014-02-11
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2014-11-14
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多