Spring WebFlux WebSocketSession으로 http handshake request 정보 넘기기

Spring Webflux 기반으로 WebSocket을 구현하려 했다.

WebSocket 요청은 WebSocketHandlerAdapter를 통해 핸드셰이킹 과정을 거치고 ws 프로토콜로 통신하게된다.

WebSocketHandler 를 구현하여 웹소켓 요청을 핸들링하게 되는데.
handle 메소드로 WebSocketSession을 넘겨준다.

WebSocketSession 에서 handshake 정보를 가져오기 위해
webSocketSession.getHandshakeInfo() 를 사용할 수 있는데.

Image for post
Image for post

개인적으론 무언가 조금 부실한 느낌이 들었다.

HandlerMapping 을 통해 uri 별 WebSocketHandler 를 맵핑했는데.
맵핑 url 패턴 이라든지 이러한 정보는 WebSocketHandlerAdapter의 WebSocketExchange 까지는 Attributes로 넘어오지만.
WebSocketSession 까지 전달되지는 않는다.

때문에 WebSocketHandlerAdapter도 까보고 HandshakeWebSocketService도 까보다가 .

아래와 같이 수정하여 Attributes 전체를 넘기게끔 해봤다.

WebSocketExchange 에서 Request 정보를 참조하여 queryParams름 넘기는데 사용 할 수도 있겠다.

  • 다른 방법을 찾는다면 지워야지…
  • Github

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store