public abstract class AbstractHandshakeHandler extends ObjectSE implements HandshakeHandler, Lifecycle
HandshakeHandler
実装の基本クラス。WebSocket ハンドシェイクリクエストの初期検証を実行します。おそらく適切な HTTP ステータスコードを介してそれを拒否します。また、そのサブクラスがネゴシエーションプロセスのさまざまな部分(たとえば、起点検証、サブプロトコルネゴシエーション、拡張ネゴシエーションなど)をオーバーライドできるようにします。
ネゴシエーションが成功すると、実際のアップグレードはサーバー固有の RequestUpgradeStrategy
に委譲されます。これにより、必要に応じてレスポンスが更新され、WebSocket が初期化されます。現在サポートされているサーバーは、Jetty 9.0-9.3、Tomcat 7.0.47+ および 8.x、Undertow 1.0-1.3、GlassFish 4.1+、WebLogic 12.1.3+ です。
JettyRequestUpgradeStrategy
, TomcatRequestUpgradeStrategy
, UndertowRequestUpgradeStrategy
, GlassFishRequestUpgradeStrategy
, WebLogicRequestUpgradeStrategy
修飾子 | コンストラクターと説明 |
---|---|
protected | AbstractHandshakeHandler() ランタイムコンテナーに適した RequestUpgradeStrategy を自動検出してインスタンス化するデフォルトのコンストラクター。 |
protected | AbstractHandshakeHandler(RequestUpgradeStrategy requestUpgradeStrategy) ランタイム固有の RequestUpgradeStrategy を受け入れるコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
protected ListSE<StringSE> | determineHandlerSupportedProtocols(WebSocketHandler handler) 特定の WebSocketHandler が SubProtocolCapable のインスタンスであるかどうかを確認することにより、サポートされているサブプロトコルを判別します。 |
protected PrincipalSE | determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, MapSE<StringSE, ObjectSE> attributes) 確立中のプロセスでユーザーを WebSocket セッションに関連付けるために使用できる方法。 |
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 拡張のリストをフィルタリングします。 |
RequestUpgradeStrategy | getRequestUpgradeStrategy() WebSocket リクエストに対して RequestUpgradeStrategy を返します。 |
StringSE[] | getSupportedProtocols() サポートされているサブプロトコルのリストを返します。 |
protected StringSE[] | getSupportedVersions() |
protected void | handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) |
protected void | handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) |
protected void | handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response) |
boolean | isRunning() このコンポーネントが現在実行されているかどうかを確認します。 |
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() このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
protected final Log logger
protected AbstractHandshakeHandler()
RequestUpgradeStrategy
を自動検出してインスタンス化するデフォルトのコンストラクター。IllegalStateExceptionSE
- RequestUpgradeStrategy
が見つからない場合。protected AbstractHandshakeHandler(RequestUpgradeStrategy requestUpgradeStrategy)
RequestUpgradeStrategy
を受け入れるコンストラクター。requestUpgradeStrategy
- 使用するアップグレード戦略 public RequestUpgradeStrategy getRequestUpgradeStrategy()
RequestUpgradeStrategy
を返します。public void setSupportedProtocols(StringSE... protocols)
実行時に渡される WebSocketHandler が SubProtocolCapable
のインスタンスである場合は、このプロパティを明示的に構成する必要がないことに注意してください。それは確かに組み込みの STOMP over WebSocket サポートの場合です。WebSocketHandler が SubProtocolCapable
を実装していない場合にのみ、このプロパティを明示的に構成する必要があります。
public StringSE[] getSupportedProtocols()
public void start()
Lifecycle
コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これは適用されるすべてのコンポーネントに開始信号を伝播します。
Lifecycle
の start
SmartLifecycle.isAutoStartup()
protected void doStart()
public void stop()
Lifecycle
SmartLifecycle
とその stop(Runnable)
バリアントの実装を検討してください。 この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、Lifecycle
Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止信号を事前に考慮することなく呼び出されます。
コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止信号を適用するすべてのコンポーネントに伝播します。
Lifecycle
の stop
SmartLifecycle.stop(Runnable)
, DisposableBean.destroy()
protected void doStop()
public boolean isRunning()
Lifecycle
コンテナーの場合、これは、適用されるすべてのコンポーネントが現在実行されている場合にのみ、true
を返します。
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
- 内部の回復不可能なエラー(つまり、ハンドシェイクのネゴシエーションに失敗したのではなくサーバーエラー)が原因でハンドシェイク処理が完了しなかった場合にスローされます。protected void handleInvalidUpgradeHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE
protected void handleInvalidConnectHeader(ServerHttpRequest request, ServerHttpResponse response) throws IOExceptionSE
protected boolean isWebSocketVersionSupported(WebSocketHttpHeaders httpHeaders)
protected StringSE[] getSupportedVersions()
protected void handleWebSocketVersionNotSupported(ServerHttpRequest request, ServerHttpResponse response)
protected boolean isValidOrigin(ServerHttpRequest request)
Origin
ヘッダー値が有効かどうかを返します。デフォルトでは、すべてのオリジンが有効と見なされます。必要に応じて、起点のフィルタリングに OriginHandshakeInterceptor
の使用を検討してください。@Nullable protected StringSE selectProtocol(ListSE<StringSE> requestedProtocols, WebSocketHandler webSocketHandler)
SubProtocolCapable
かどうかをチェックし、次にサブプロトコルが setSupportedProtocols(String...)
で明示的に構成されているかどうかもチェックします。requestedProtocols
- リクエストされたサブプロトコル webSocketHandler
- 使用される WebSocketHandlernull
determineHandlerSupportedProtocols(WebSocketHandler)
protected final ListSE<StringSE> determineHandlerSupportedProtocols(WebSocketHandler handler)
SubProtocolCapable
のインスタンスであるかどうかを確認することにより、サポートされているサブプロトコルを判別します。handler
- チェックするハンドラー protected ListSE<WebSocketExtension> filterRequestedExtensions(ServerHttpRequest request, ListSE<WebSocketExtension> requestedExtensions, ListSE<WebSocketExtension> supportedExtensions)
4.1 以降、このメソッドのデフォルトの実装ではリストがフィルタリングされ、リクエストとサポートの両方が行われた拡張のみが残されます。
request
- 現在のリクエスト requestedExtensions
- クライアントがリクエストした拡張機能のリスト supportedExtensions
- サーバーがサポートする拡張機能のリスト @Nullable protected PrincipalSE determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, MapSE<StringSE,ObjectSE> attributes)
ServerHttpRequest.getPrincipal()
を呼び出します サブクラスは、ユーザーをセッションに関連付けるためのカスタムロジックを提供できます。たとえば、匿名ユーザーに名前を割り当てる(完全に認証されていない)などです。
request
- ハンドシェイクリクエスト wsHandler
- メッセージを処理する WebSocket ハンドラー attributes
- WebSocket セッションに渡すハンドシェイク属性 null