클라이언트의 정보를 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으로 전송할 때 유용하게 사용될 수 있습니다.
