클라이언트의 정보를 Websocket Session 이 가져오지 못하여 NullPointerException
발생하였고 즉, WebSocket 연결이 설정되었을 때, userId
값을 가져오는 부분에서 null
이 반환되고 있습니다. 이로 인해 put()
작업에서 에러가 발생하였습니다.
Closing session due to exception for StandardWebSocketSession[id=7d4b069f-8e76-a7b9-2111-86f059197d29, uri=ws://localhost:19100/ws/connect/coin-data-per-user?userId=1]
java.lang.NullPointerException: null
userId
가 제대로 설정되지 않음:
afterConnectionEstablished()
메서드에서 String userId = (String) session.getAttributes().get("userId");
로 userId
를 가져오고 있는데, 이값이 null 값으로 들어오는 것이다.userId
는 보통 WebSocket 핸드셰이크 단계에서 클라이언트로부터 전달받아야 하는데, 현재 이 값이 제대로 전달되지 않는 경우가 발생하였다.userId
를 세션의 속성에 설정하는 부분이 필요합니다. 아래와 같이 HttpSessionHandshakeInterceptor
를 추가하여 userId
를 설정할 수 있습니다.WebSocketConfig
에 핸드셰이크 인터셉터를 추가하여 클라이언트로부터 userId
값을 받아서 세션에 저장합니다.다음과 같이 WebSocket 핸드셰이크 인터셉터를 사용하여 userId를 WebSocket 세션의 속성(attributes)에 저장하여 userId는 WebSocket 세션의 attributes
맵에 저장되어, 이후에 WebSocket 핸들러에서 이 속성값을 조회할 수 있습니다. 이는 사용자별로 맞춤형 데이터를 WebSocket으로 전송할 때 유용하게 사용될 수 있습니다.