Loading...
Spring Framework Reference Documentation 7.0.2의 Interception의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Events는 STOMP 연결의 lifecycle에 대한 알림을 제공하지만 모든 클라이언트 메시지에 대해서는 제공하지 않습니다. 애플리케이션은 또한 처리 체인의 어떤 부분에서든 어떤 메시지든 가로채기 위해 ChannelInterceptor를 등록할 수 있습니다. 다음 예제는 클라이언트로부터의 인바운드 메시지를 가로채는 방법을 보여줍니다:
1@Configuration 2@EnableWebSocketMessageBroker 3public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer { 4 5 @Override 6 public void configureClientInboundChannel(ChannelRegistration registration) { 7 registration.interceptors(new MyChannelInterceptor()); 8 } 9}
1@Configuration 2@EnableWebSocketMessageBroker 3class WebSocketConfiguration : WebSocketMessageBrokerConfigurer { 4 5 override fun configureClientInboundChannel(registration: ChannelRegistration) { 6 registration.interceptors(MyChannelInterceptor()) 7 } 8}
custom ChannelInterceptor는 StompHeaderAccessor 또는 SimpMessageHeaderAccessor를 사용하여 메시지에 대한 정보에 접근할 수 있으며, 다음 예제가 이를 보여줍니다:
1public class MyChannelInterceptor implements ChannelInterceptor { 2 3 @Override 4 public Message<?> preSend(Message<?> message, MessageChannel channel) { 5 StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); 6 StompCommand command = accessor.getCommand(); 7 // ... 8 return message; 9 } 10}
1class MyChannelInterceptor : ChannelInterceptor { 2 3 override fun preSend(message: Message<*>, channel: MessageChannel): Message<*> { 4 val accessor = StompHeaderAccessor.wrap(message) 5 val command = accessor.command 6 // ... 7 return message 8 } 9}
애플리케이션은 또한 메시지가 처리되는 스레드에서 콜백을 가지는 ChannelInterceptor의 서브 인터페이스인 ExecutorChannelInterceptor를 구현할 수도 있습니다. ChannelInterceptor가 채널로 전송되는 각 메시지마다 한 번씩 호출되는 반면, ExecutorChannelInterceptor는 채널로부터의 메시지를 구독한 각 MessageHandler의 스레드에 훅을 제공합니다.
앞서 설명한 SessionDisconnectEvent와 마찬가지로, DISCONNECT 메시지는 클라이언트로부터 올 수도 있고 WebSocket 세션이 종료될 때 자동으로 생성될 수도 있습니다. 어떤 경우에는 인터셉터가 각 세션에 대해 이 메시지를 한 번 이상 가로챌 수 있습니다. 컴포넌트는 여러 disconnect 이벤트에 대해 멱등해야 합니다.
Events
STOMP Client