-
STOMP 연결, 해제 시 header 값 Error트러블슈팅 2024. 8. 15. 23:38
문제
ChatService에서 @EventListener 를 통해 프론트에서 header 에 같이 넣어준 chatRoomId와 socket session id의 값을 제대로 가져오지 못 하는 문제가 발생
원인
- 기존 코드
@EventListener public void handleSessionConnect(SessionConnectEvent event) { MessageHeaderAccessor accessor = NativeMessageHeaderAccessor.getAccessor(event.getMessage(), SimpMessageHeaderAccessor.class); GenericMessage generic = (GenericMessage) accessor.getHeader("simpConnectMessage"); Map nativeHeaders = (Map) generic.getHeaders().get("nativeHeaders"); Long chatRoomId = Long.parseLong((String) ((List) nativeHeaders.get("chatRoomId")).get(0)); String sessionId = (String) generic.getHeaders().get("simpSessionId"); ... }
MessageHeaderAccessor 객체를 통해 값을 가져오려했지만, 계속해서 header의 값을 가져오지 못 했다.
해결
@EventListener public void handleSessionConnect(SessionConnectEvent event) { StompHeaderAccessor accessor = StompHeaderAccessor.wrap(event.getMessage()); GenericMessage generic = (GenericMessage) accessor.getHeader("simpConnectMessage"); Map nativeHeaders = (Map) generic.getHeaders().get("nativeHeaders"); Long chatRoomId = Long.parseLong((String) ((List) nativeHeaders.get("chatRoomId")).get(0)); String sessionId = (String) generic.getHeaders().get("simpSessionId"); ... }
MessageHeaderAccessor가 아닌 StompHeaderAccessor 객체를 통해 header에서 필요한 정보를 추출해 사용했다.
'트러블슈팅' 카테고리의 다른 글
STOMP 메시지 전송 시 security context holder에서 유저 정보를 가져올 수 없는 error (0) 2024.08.16 WebSocket 연결 시, JWT Token Error (0) 2024.08.15 Redis protected mode Error (0) 2024.08.15 spring security oauth2.0 kakao error (0) 2024.08.15 Github Actions Build 에러 (0) 2024.03.15