1
有沒有什麼辦法在Spring中攔截STOMP CONNECT
幀並在某些情況下拒絕它? 截取本身可以使用SessionConnectEvent
完成,但我想允許或拒絕基於標頭的連接。我無法在SessionConnectEvent
監聽器中執行此操作。Spring Websocket Stomp handle CONNECT frame
有沒有什麼辦法在Spring中攔截STOMP CONNECT
幀並在某些情況下拒絕它? 截取本身可以使用SessionConnectEvent
完成,但我想允許或拒絕基於標頭的連接。我無法在SessionConnectEvent
監聽器中執行此操作。Spring Websocket Stomp handle CONNECT frame
如果我們看一看到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
爲好。
所以,你需要達到你的要求是提供一個自定義的ChannelInterceptor
和preSend
實現並註冊它覆蓋WebSocketMessageBrokerConfigurer.configureClientInboundChannel
。
我已經嘗試過'ChannelInterceptor',但它看起來像'CONNECT'框架沒有被攔截...可能我做錯了什麼。我在閱讀你的答案之後再次嘗試,並且工作。謝謝。我不喜歡'ChannelInterceptor'的唯一原因是它在每一幀都被調用,而我只需要攔截'CONNECT'幀。無論如何,解決方案符合我的要求。 – Damian