クラス AbstractHandshakeHandler

java.lang.ObjectSE
org.springframework.web.socket.server.support.AbstractHandshakeHandler
実装されたすべてのインターフェース:
LifecycleHandshakeHandler
既知の直属サブクラス
DefaultHandshakeHandler

public abstract class AbstractHandshakeHandler extends ObjectSE implements HandshakeHandler, Lifecycle
サーブレット API から独立した HandshakeHandler 実装の基本クラス。

WebSocket ハンドシェイクリクエストの初期検証を実行します。おそらく適切な HTTP ステータスコードを介してそれを拒否します。また、そのサブクラスがネゴシエーションプロセスのさまざまな部分(たとえば、起点検証、サブプロトコルネゴシエーション、拡張ネゴシエーションなど)をオーバーライドできるようにします。

ネゴシエーションが成功すると、実際のアップグレードはサーバー固有の RequestUpgradeStrategy に委譲され、必要に応じてレスポンスが更新され、WebSocket が初期化されます。

導入:
4.2
作成者:
Rossen Stoyanchev, Juergen Hoeller
関連事項:
  • フィールドの詳細

    • logger

      protected final Log logger
  • コンストラクターの詳細

    • AbstractHandshakeHandler

      protected AbstractHandshakeHandler()
      ランタイムコンテナーに適した RequestUpgradeStrategy を自動検出してインスタンス化するデフォルトのコンストラクター。
      例外:
      IllegalStateExceptionSE - RequestUpgradeStrategy が見つからない場合。
    • AbstractHandshakeHandler

      protected AbstractHandshakeHandler(RequestUpgradeStrategy requestUpgradeStrategy)
      ランタイム固有の RequestUpgradeStrategy を受け入れるコンストラクター。
      パラメーター:
      requestUpgradeStrategy - 使用するアップグレード戦略
  • メソッドの詳細

    • getRequestUpgradeStrategy

      public RequestUpgradeStrategy getRequestUpgradeStrategy()
      WebSocket リクエストに対して RequestUpgradeStrategy を返します。
    • setSupportedProtocols

      public void setSupportedProtocols(StringSE... protocols)
      このプロパティを使用して、サポートされているサブプロトコルのリストを構成します。クライアントがリクエストしたサブプロトコルに一致する、最初に構成されたサブプロトコルが受け入れられます。一致がない場合、レスポンスには Sec-WebSocket-Protocol ヘッダーが含まれません。

      実行時に渡された WebSocketHandler が SubProtocolCapable のインスタンスである場合、このプロパティを明示的に構成する必要はないことに注意してください。これは、組み込みの STOMP over WebSocket サポートの場合に当てはまります。このプロパティは、WebSocketHandler が SubProtocolCapable を実装していない場合にのみ明示的に構成する必要があります。

    • getSupportedProtocols

      public StringSE[] getSupportedProtocols()
      サポートされているサブプロトコルのリストを返します。
    • start

      public void start()
      インターフェースからコピーされた説明: Lifecycle
      このコンポーネントを起動します。

      コンポーネントがすでに実行されている場合は、例外をスローしないでください。

      コンテナーの場合、これは適用されるすべてのコンポーネントに開始信号を伝播します。

      次で指定:
      インターフェース Lifecyclestart 
      関連事項:
    • doStart

      protected void doStart()
    • stop

      public void stop()
      インターフェースからコピーされた説明: Lifecycle
      このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycle とその stop(Runnable) バリアントの実装を検討してください。

      この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、Lifecycle Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止信号を事前に考慮することなく呼び出されます。

      コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。

      コンテナーの場合、これは停止信号を適用するすべてのコンポーネントに伝播します。

      次で指定:
      インターフェース Lifecyclestop 
      関連事項:
    • doStop

      protected void doStop()
    • isRunning

      public boolean isRunning()
      インターフェースからコピーされた説明: Lifecycle
      このコンポーネントが現在実行されているかどうかを確認します。

      コンテナーの場合、これは、適用されるすべてのコンポーネントが現在実行されている場合にのみ、true を返します。

      次で指定:
      インターフェース LifecycleisRunning 
      戻り値:
      コンポーネントが現在実行中かどうか
    • doHandshake

      public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, MapSE<StringSE,ObjectSE> attributes) throws HandshakeFailureException
      インターフェースからコピーされた説明: HandshakeHandler
      ハンドシェイクを開始します。
      次で指定:
      インターフェース HandshakeHandlerdoHandshake 
      パラメーター:
      request - 現在のリクエスト
      response - 現在のレスポンス
      wsHandler - WebSocket メッセージを処理するハンドラー。ハンドラーに接続ごとのライフサイクルを提供する方法については、PerConnectionWebSocketHandler を参照してください。
      attributes - WebSocket セッションに関連付ける HTTP ハンドシェイクの属性。提供された属性がコピーされ、元のマップは使用されません。
      戻り値:
      握手交渉が成功したかどうか。どちらの場合も、レスポンスステータス、ヘッダー、本文は、交渉の結果を反映するように更新されます
      例外:
      HandshakeFailureException - 内部の回復不可能なエラー(つまり、ハンドシェイクのネゴシエーションに失敗したのではなくサーバーエラー)が原因でハンドシェイク処理が完了しなかった場合にスローされます。
    • handleInvalidUpgradeHeader

      protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE
      例外:
      IOExceptionSE
    • handleInvalidConnectHeader

      protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE
      例外:
      IOExceptionSE
    • isWebSocketVersionSupported

      protected boolean isWebSocketVersionSupported(WebSocketHttpHeaders httpHeaders)
    • getSupportedVersions

      protected StringSE[] getSupportedVersions()
    • handleWebSocketVersionNotSupported

      protected void handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response)
    • isValidOrigin

      protected boolean isValidOrigin(ServerHttpRequest request)
      リクエストの Origin ヘッダー値が有効かどうかを返します。デフォルトでは、すべてのオリジンが有効と見なされます。必要に応じて、起点のフィルタリングに OriginHandshakeInterceptor の使用を検討してください。
    • selectProtocol

      @Nullable protected StringSE selectProtocol(ListSE<StringSE> requestedProtocols, WebSocketHandler webSocketHandler)
      リクエストされ、サポートされているサブプロトコルに基づいて、サブプロトコルネゴシエーションを実行します。サポートされているサブプロトコルのリストについて、このメソッドは最初にターゲット WebSocketHandler が SubProtocolCapable かどうかをチェックし、次にサブプロトコルが setSupportedProtocols(String...) で明示的に構成されているかどうかもチェックします。
      パラメーター:
      requestedProtocols - リクエストされたサブプロトコル
      webSocketHandler - 使用される WebSocketHandler
      戻り値:
      選択したプロトコルまたは null
      関連事項:
    • determineHandlerSupportedProtocols

      protected final ListSE<StringSE> determineHandlerSupportedProtocols(WebSocketHandler handler)
      特定の WebSocketHandler が SubProtocolCapable のインスタンスであるかどうかを確認することにより、サポートされているサブプロトコルを判別します。
      パラメーター:
      handler - チェックするハンドラー
      戻り値:
      サポートされているプロトコルのリスト、または使用可能なプロトコルがない場合は空のリスト
    • filterRequestedExtensions

      protected ListSE<WebSocketExtension> filterRequestedExtensions(ServerHttpRequest request, ListSE<WebSocketExtension> requestedExtensions, ListSE<WebSocketExtension> supportedExtensions)
      リクエストされた WebSocket 拡張のリストをフィルタリングします。

      4.1 以降、このメソッドのデフォルトの実装ではリストがフィルタリングされ、リクエストとサポートの両方が行われた拡張のみが残されます。

      パラメーター:
      request - 現在のリクエスト
      requestedExtensions - クライアントがリクエストした拡張機能のリスト
      supportedExtensions - サーバーがサポートする拡張機能のリスト
      戻り値:
      選択した拡張子または空のリスト
    • determineUser

      @Nullable protected PrincipalSE determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, MapSE<StringSE,ObjectSE> attributes)
      確立中のプロセスでユーザーを WebSocket セッションに関連付けるために使用できる方法。デフォルトの実装は ServerHttpRequest.getPrincipal() を呼び出します

      サブクラスは、ユーザーをセッションに関連付けるためのカスタムロジックを提供できます。たとえば、匿名ユーザーに名前を割り当てる(完全に認証されていない)などです。

      パラメーター:
      request - ハンドシェイクリクエスト
      wsHandler - メッセージを処理する WebSocket ハンドラー
      attributes - WebSocket セッションに渡すハンドシェイク属性
      戻り値:
      WebSocket セッションのユーザー、または使用できない場合は null