트러블슈팅
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에서 필요한 정보를 추출해 사용했다.