跳到主要内容
版本:7.0.3

拦截

Hunyuan 7b 中英对照 Interception

事件 为 STOMP 连接的生命周期提供通知,但不会对每条客户端消息都进行通知。应用程序还可以注册一个 ChannelInterceptor 来拦截处理链中的任何消息和任何环节。以下示例展示了如何拦截来自客户端的传入消息:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(new MyChannelInterceptor());
}
}

一个自定义的 ChannelInterceptor 可以使用 StompHeaderAccessorSimpMessageHeaderAccessor 来访问关于消息的信息,如下例所示:

public class MyChannelInterceptor implements ChannelInterceptor {

@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
StompCommand command = accessor.getCommand();
// ...
return message;
}
}

应用程序还可以实现ExecutorChannelInterceptor,它是ChannelInterceptor的子接口,其回调在处理消息的线程中执行。虽然每个发送到通道的消息都会调用一次ChannelInterceptor,但ExecutorChannelInterceptor会在每个订阅该通道消息的MessageHandler的线程中提供钩子(hook)。

请注意,与前面描述的SessionDisconnectEvent一样,DISCONNECT消息可以来自客户端,也可以在WebSocket会话关闭时自动生成。在某些情况下,对于每个会话,拦截器可能会多次截获到这条消息。组件应对多次断开连接事件具有幂等性(idempotent)。