技術共有

springboot 統合 Websocket を調べていますが、接続できませんが、netty-websocket を使用すると接続できます

2024-07-12

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

理由: Spring-security が統合されています。WebSocket リクエストをインターセプトし、ログを出力しませんでした (一般的な Spring 関連のログ レベルが警告であるため。デバッグ モードのログが多すぎます)。

次に、undertow のログ レベルを変更してログを表示できます。

  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 が spring-security フィルター チェーンを使用しなかったためです。