기술나눔

springboot 통합 웹소켓 탐색, 연결할 수 없지만 netty-websocket을 사용하여 연결할 수 있음

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

이유: Spring 보안이 통합되었습니다.websocket 요청을 가로채서 로그를 출력하지 않았습니다. (일반 스프링 관련 로그 레벨이 warning 이기 때문입니다. 디버그 모드에서 로그가 너무 많습니다.)

그런 다음 언더토우 로그 수준을 수정하여 로그를 볼 수 있습니다.

  1. # 日志配置
  2. logging:
  3. level:
  4. com.cas.wict: debug
  5. org.springframework: warn
  6. org.springframework.web: debug
  7. io.undertow: debug

키 로그 출력

  1. 2024-07-11 10:15:43.292 [XNIO-1 task-1] DEBUG io.undertow.request.security
  2. - Attempting to authenticate /ws, authentication required: false
  3. 2024-07-11 10:15:43.293 [XNIO-1 task-1] DEBUG io.undertow.request.security
  4. - Authentication outcome was NOT_ATTEMPTED with method io.undertow.security.impl.CachedAuthenticatedSessionMechanism@7fedbc60 for /ws
  5. 2024-07-11 10:15:43.293 [XNIO-1 task-1] DEBUG io.undertow.request.security
  6. - Authentication result was ATTEMPTED for /ws

보안이 ws 요청 경로를 가로채었을 수 있음이 발견되었습니다(왜 가로채었는지, ws가 작성되었지만 시작될 때 여전히 http였으며 백그라운드에서 websocket으로 업그레이드된 것 같습니다).

해결 방법: 확인을 중단하고 별도의 필터를 작성하여 ws 요청을 확인하세요.

이전에는 netty-websocket을 사용하여 연결이 가능했던 이유는 netty가 스프링 보안 필터 체인을 사용하지 않았기 때문입니다.