クラス AbstractHandshakeHandler
- 実装されたすべてのインターフェース:
Lifecycle
,HandshakeHandler
- 既知の直属サブクラス
DefaultHandshakeHandler
HandshakeHandler
実装の基本クラス。WebSocket ハンドシェイクリクエストの初期検証を実行します。おそらく適切な HTTP ステータスコードを介してそれを拒否します。また、そのサブクラスがネゴシエーションプロセスのさまざまな部分(たとえば、起点検証、サブプロトコルネゴシエーション、拡張ネゴシエーションなど)をオーバーライドできるようにします。
ネゴシエーションが成功すると、実際のアップグレードはサーバー固有の RequestUpgradeStrategy
に委譲され、必要に応じてレスポンスが更新され、WebSocket が初期化されます。
- 導入:
- 4.2
- 作成者:
- Rossen Stoyanchev, Juergen Hoeller
- 関連事項:
フィールドサマリー
コンストラクターのサマリー
修飾子コンストラクター説明protected
ランタイムコンテナーに適したRequestUpgradeStrategy
を自動検出してインスタンス化するデフォルトのコンストラクター。protected
AbstractHandshakeHandler
(RequestUpgradeStrategy requestUpgradeStrategy) ランタイム固有のRequestUpgradeStrategy
を受け入れるコンストラクター。メソッドのサマリー
修飾子と型メソッド説明特定の WebSocketHandler がSubProtocolCapable
のインスタンスであるかどうかを確認することにより、サポートされているサブプロトコルを判別します。protected PrincipalSE
determineUser
(ServerHttpRequest request, WebSocketHandler wsHandler, MapSE<StringSE, ObjectSE> attributes) 確立中のプロセスでユーザーを WebSocket セッションに関連付けるために使用できる方法。final boolean
doHandshake
(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, MapSE<StringSE, ObjectSE> attributes) ハンドシェイクを開始します。protected void
doStart()
protected void
doStop()
protected ListSE<WebSocketExtension>
filterRequestedExtensions
(ServerHttpRequest request, ListSE<WebSocketExtension> requestedExtensions, ListSE<WebSocketExtension> supportedExtensions) リクエストされた WebSocket 拡張のリストをフィルタリングします。WebSocket リクエストに対してRequestUpgradeStrategy
を返します。StringSE[]
サポートされているサブプロトコルのリストを返します。protected StringSE[]
protected void
handleInvalidConnectHeader
(ServerHttpRequest request, ServerHttpResponse response) protected void
handleInvalidUpgradeHeader
(ServerHttpRequest request, ServerHttpResponse response) protected void
handleWebSocketVersionNotSupported
(ServerHttpRequest request, ServerHttpResponse response) boolean
このコンポーネントが現在実行されているかどうかを確認します。protected boolean
isValidOrigin
(ServerHttpRequest request) リクエストのOrigin
ヘッダー値が有効かどうかを返します。protected boolean
isWebSocketVersionSupported
(WebSocketHttpHeaders httpHeaders) protected StringSE
selectProtocol
(ListSE<StringSE> requestedProtocols, WebSocketHandler webSocketHandler) リクエストされ、サポートされているサブプロトコルに基づいて、サブプロトコルネゴシエーションを実行します。void
setSupportedProtocols
(StringSE... protocols) このプロパティを使用して、サポートされているサブプロトコルのリストを構成します。void
start()
このコンポーネントを起動します。void
stop()
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。
フィールドの詳細
logger
コンストラクターの詳細
AbstractHandshakeHandler
protected AbstractHandshakeHandler()ランタイムコンテナーに適したRequestUpgradeStrategy
を自動検出してインスタンス化するデフォルトのコンストラクター。- 例外:
IllegalStateExceptionSE
-RequestUpgradeStrategy
が見つからない場合。
AbstractHandshakeHandler
ランタイム固有のRequestUpgradeStrategy
を受け入れるコンストラクター。- パラメーター:
requestUpgradeStrategy
- 使用するアップグレード戦略
メソッドの詳細
getRequestUpgradeStrategy
WebSocket リクエストに対してRequestUpgradeStrategy
を返します。setSupportedProtocols
このプロパティを使用して、サポートされているサブプロトコルのリストを構成します。クライアントがリクエストしたサブプロトコルに一致する、最初に構成されたサブプロトコルが受け入れられます。一致がない場合、レスポンスには Sec-WebSocket-Protocol ヘッダーが含まれません。実行時に渡された WebSocketHandler が
SubProtocolCapable
のインスタンスである場合、このプロパティを明示的に構成する必要はないことに注意してください。これは、組み込みの STOMP over WebSocket サポートの場合に当てはまります。このプロパティは、WebSocketHandler がSubProtocolCapable
を実装していない場合にのみ明示的に構成する必要があります。getSupportedProtocols
サポートされているサブプロトコルのリストを返します。start
public void start()インターフェースからコピーされた説明:Lifecycle
このコンポーネントを起動します。コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これは適用されるすべてのコンポーネントに開始シグナルを伝播します。
doStart
protected void doStart()stop
public void stop()インターフェースからコピーされた説明:Lifecycle
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycle
とそのstop(Runnable)
バリアントの実装を検討してください。この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、
Lifecycle
Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止シグナルを事前に考慮することなく呼び出されます。コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止シグナルを適用するすべてのコンポーネントに伝播します。
doStop
protected void doStop()isRunning
public boolean isRunning()インターフェースからコピーされた説明:Lifecycle
このコンポーネントが現在実行されているかどうかを確認します。コンテナーの場合、これは、適用されるすべてのコンポーネントが現在実行されている場合にのみ、
true
を返します。doHandshake
public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, MapSE<StringSE, ObjectSE> attributes) throws HandshakeFailureExceptionインターフェースからコピーされた説明:HandshakeHandler
ハンドシェイクを開始します。- 次で指定:
- インターフェース
HandshakeHandler
のdoHandshake
- パラメーター:
request
- 現在のリクエストresponse
- 現在のレスポンスwsHandler
- WebSocket メッセージを処理するハンドラー。ハンドラーに接続ごとのライフサイクルを提供する方法については、PerConnectionWebSocketHandler
を参照してください。attributes
- WebSocket セッションに関連付ける HTTP ハンドシェイクの属性。提供された属性がコピーされ、元のマップは使用されません。- 戻り値:
- 握手交渉が成功したかどうか。どちらの場合も、レスポンスステータス、ヘッダー、本文は、交渉の結果を反映するように更新されます
- 例外:
HandshakeFailureException
- 内部の回復不可能なエラー(つまり、ハンドシェイクのネゴシエーションに失敗したのではなくサーバーエラー)が原因でハンドシェイク処理が完了しなかった場合にスローされます。
handleInvalidUpgradeHeader
protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE handleInvalidConnectHeader
protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE isWebSocketVersionSupported
getSupportedVersions
handleWebSocketVersionNotSupported
protected void handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response) isValidOrigin
リクエストのOrigin
ヘッダー値が有効かどうかを返します。デフォルトでは、すべてのオリジンが有効と見なされます。必要に応じて、起点のフィルタリングにOriginHandshakeInterceptor
の使用を検討してください。selectProtocol
@Nullable protected StringSE selectProtocol(ListSE<StringSE> requestedProtocols, WebSocketHandler webSocketHandler) リクエストされ、サポートされているサブプロトコルに基づいて、サブプロトコルネゴシエーションを実行します。サポートされているサブプロトコルのリストについて、このメソッドは最初にターゲット WebSocketHandler がSubProtocolCapable
かどうかをチェックし、次にサブプロトコルがsetSupportedProtocols(String...)
で明示的に構成されているかどうかもチェックします。- パラメーター:
requestedProtocols
- リクエストされたサブプロトコルwebSocketHandler
- 使用される WebSocketHandler- 戻り値:
- 選択したプロトコルまたは
null
- 関連事項:
determineHandlerSupportedProtocols
特定の 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