💻문제점
웹소켓+Stomp 사용한 채팅 서버를 구현하고 PostMan으로 테스트 하려고 했는데 영 쉽지 않았다.
Post로 웹 소켓을 연결하고, PostMan의 WebSocket Request를 사용하여 테스트하려고 했다.
웹 소켓 연결을 위해 다음과 같이 요청 uri를 작성해서 보냈지만 오류가 발생...
📃시도
시도1. raw에서 socket.io로 변경하여 요청
시도2. uri 변경
ws://localhost:4000/ws-edit/chat/enter
시도3. 연결을 POST로 시도, uri 변경
여기서 이제 연결은 http post 요청으로 하는 것임을 알게되었다...!
웹소켓 연결 자체를 웹 소켓으로 하려고 했으니...ㅎㅎ
연결했으니 채팅방을 입장하고자 했다.
여러 uri로 테스트 했으나 매번 403 또는 404 에러가 발생...
ws://localhost:4000/ws-edit/pub/chat/enter
ws://localhost:4000/ws-edit
localhost:4000/ws-edit/pub/chat/enter
등.......
여러가지를 찾아보던 중에 스프링 시큐리티와 JWT를 사용을 위해서는 다른 것을 추가해야 했다.
클라이언트가 WebSocket을 연결하기 전에 헤더에 담긴 토큰을 검증해야 해서, 다음을 추가했다.
@Slf4j
@RequiredArgsConstructor
@Component
public class StompHandler implements ChannelInterceptor {
private final JwtUtil jwtUtil;
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
log.info("preSend");
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
if (StompCommand.CONNECT == accessor.getCommand()) {
jwtUtil.validateToken(accessor.getFirstNativeHeader("ACCESS_HEADER"));
}
return message;
}
}
WebSockConfig에는 다음을 추가
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(stompHandler);
}
역시나 채팅방 입장할 때 에러가 발생했다...
코드 자체에 문제가 있었을지도 모르고, 스프링시큐리티+JWT가 있는 기반에서 코드를 작성하니 어떤 문제로 인한 것인지 알기 어려웠다. 그래서 다시 깃허브를 pull 해와서 다른 블로그를 참고하여 진행했지만... 웹 소켓 연결 자체에서 부터 연결이 발생하는 등 문제가 많았다... 내일도 이 문제를 해결할 예정이다.
'TIL' 카테고리의 다른 글
[TIL - 20230430] WebSocket+Stomp 사용자들이 있는 채팅방 찾기 (0) | 2023.04.30 |
---|---|
[TIL - 20230429] WebSocket + Stomp 적용기2 (0) | 2023.04.29 |
[TIL - 20230428] failed to lazily initialize a collection of role (0) | 2023.04.28 |
[TIL - 20230427] message properties 사용한 @Valid 메시지 처리 (0) | 2023.04.27 |
[TIL - 20230426] Enum 타입 필드 검증을 위한 커스텀 애노테이션 생성 (0) | 2023.04.26 |