クラス ResourceWebHandler
- 実装されているすべてのインターフェース:
InitializingBean,WebHandler
HttpRequestHandler "locations" プロパティは、静的リソースがこのハンドラーによって提供されることを許可されている Spring Resource ロケーションのリストを取ります。リソースは、クラスパスの場所から提供できます。"classpath:/META-INF/public-web-resources/"。jar ファイルで .js、.css などのリソースを便利にパッケージ化して提供できます。
このリクエストハンドラーは、resourcesResolver および resourceTransformer チェーンで構成して、提供されるリソースの任意の解決と変換をサポートすることもできます。デフォルトでは、PathResourceResolver は設定された「場所」に基づいてリソースを単に検索します。アプリケーションは、URL にあるバージョンのリソースの URL を解決および準備できる VersionResourceResolver などの追加のリゾルバーおよびトランスフォーマーを構成できます。
また、このハンドラーは Last-Modified ヘッダー(存在する場合)を適切に評価するため、304 ステータスコードが適切に返され、クライアントによってすでにキャッシュされているリソースの不要なオーバーヘッドが回避されます。
- 導入:
- 5.0
- 作成者:
- Rossen Stoyanchev, Brian Clozel, Juergen Hoeller
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明voidCacheControlインスタンスを返して、Cache-Control HTTP レスポンスヘッダーを作成します。リソースを提供するときに使用される HTTP ETag ジェネレーター関数を返します。静的リソースを提供するためのソースとして使用するResourceパスのListを返します。構成された場所の値を返します。configuredメディア型マッピングを返します。protected reactor.core.publisher.Mono<Resource>getResource(ServerWebExchange exchange) 構成されたリソースメッセージライターを返します。設定されたリソースリゾルバーのリストを返します。設定済みのリソーストランスフォーマのリストを返します。reactor.core.publisher.Mono<VoidSE>handle(ServerWebExchange exchange) リソースリクエストを処理します。protected void構成されたリソースリゾルバーの中からPathResourceResolverを探し、そのクラスで構成されたlocationsと一致するようにallowedLocationsプロパティ(空の場合)を設定します。protected booleanisInvalidPath(StringSE path) 無効なリソースパスを識別します。boolean起動時の存在チェックを通じて指定された場所を最適化するかどうかを返し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。boolean静的リソースを提供するときに、Resource.lastModified()情報を使用して HTTP レスポンスを駆動するかどうかを返します。protected StringSEprocessPath(StringSE path) 指定されたリソースパスを処理します。voidsetCacheControl(CacheControl cacheControl) CacheControlインスタンスを設定して、Cache-Control HTTP レスポンスヘッダーを構築します。voidsetEtagGenerator(FunctionSE<Resource, StringSE> etagGenerator) レスポンスに書き込もうとしているResourceを考慮して、ETag 情報の作成に使用されるジェネレーター関数を構成します。protected voidsetHeaders(ServerWebExchange exchange, Resource resource, MediaType mediaType) レスポンスにヘッダーを設定します。voidsetLocations(ListSE<Resource> locations) 静的リソースを提供するためのソースとして使用するResourceパスのListを設定します。voidsetLocationValues(ListSE<StringSE> locationValues) Resourceロケーションに解決される文字列ベースのロケーション値のリストを受け入れます。voidsetMediaTypes(MapSE<StringSE, MediaType> mediaTypes) 静的Resourceのファイル名から抽出されたファイル拡張子と、レスポンスに使用するメディア型との間にマッピングを追加します。voidsetOptimizeLocations(boolean optimizeLocations) 起動時の存在チェックで指定した場所を最適化するかどうかを設定し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。voidsetResourceHttpMessageWriter(ResourceHttpMessageWriter httpMessageWriter) 使用するResourceHttpMessageWriterを構成します。voidsetResourceLoader(ResourceLoader resourceLoader) location valuesをロードする ResourceLoader を提供します。voidsetResourceResolvers(ListSE<ResourceResolver> resourceResolvers) 使用するResourceResolversのリストを構成します。voidsetResourceTransformers(ListSE<ResourceTransformer> resourceTransformers) 使用するResourceTransformersのリストを構成します。voidsetUseLastModified(boolean useLastModified) リソースを提供するときにResource.lastModified()を確認し、この情報を使用して"Last-Modified"HTTP レスポンスヘッダーを駆動するかどうかを設定します。toString()
コンストラクターの詳細
ResourceWebHandler
public ResourceWebHandler()
メソッドの詳細
setResourceLoader
location valuesをロードする ResourceLoader を提供します。- 導入:
- 5.1
setLocationValues
Resourceロケーションに解決される文字列ベースのロケーション値のリストを受け入れます。- 導入:
- 5.1
getLocationValues
構成された場所の値を返します。- 導入:
- 5.1
setLocations
静的リソースを提供するためのソースとして使用するResourceパスのListを設定します。getLocations
静的リソースを提供するためのソースとして使用するResourceパスのListを返します。ロードされたリソースベースの場所の代わりに
locationValuesが提供される場合、このメソッドはafterPropertiesSet()による初期化の後まで空を返すことに注意してください。注意 : 5.3.11 の時点で、場所のリストは実際には存在しない場所を除外するようにフィルタリングされる可能性があるため、このメソッドから返されるリストは、指定されたすべての場所のサブセットである可能性があります。
setOptimizeLocations(boolean)を参照してください。setResourceResolvers
使用するResourceResolversのリストを構成します。デフォルトでは、
PathResourceResolverが構成されています。このプロパティを使用する場合、PathResourceResolverを最後のリゾルバーとして追加することをお勧めします。getResourceResolvers
設定されたリソースリゾルバーのリストを返します。setResourceTransformers
使用するResourceTransformersのリストを構成します。デフォルトでは、使用するトランスフォーマは構成されていません。
getResourceTransformers
設定済みのリソーストランスフォーマのリストを返します。setResourceHttpMessageWriter
使用するResourceHttpMessageWriterを構成します。デフォルトでは、
ResourceHttpMessageWriterが構成されます。getResourceHttpMessageWriter
構成されたリソースメッセージライターを返します。setCacheControl
CacheControlインスタンスを設定して、Cache-Control HTTP レスポンスヘッダーを構築します。getCacheControl
CacheControlインスタンスを返して、Cache-Control HTTP レスポンスヘッダーを作成します。setUseLastModified
public void setUseLastModified(boolean useLastModified) リソースを提供するときにResource.lastModified()を確認し、この情報を使用して"Last-Modified"HTTP レスポンスヘッダーを駆動するかどうかを設定します。このオプションはデフォルトで有効になっており、静的ファイルのメタデータを無視する必要がある場合はオフにする必要があります。
- 導入:
- 5.3
isUseLastModified
public boolean isUseLastModified()静的リソースを提供するときに、Resource.lastModified()情報を使用して HTTP レスポンスを駆動するかどうかを返します。- 導入:
- 5.3
setEtagGenerator
レスポンスに書き込もうとしているResourceを考慮して、ETag 情報の作成に使用されるジェネレーター関数を構成します。この関数は、
ServerWebExchange.checkNotModified(String)で引数として使用される String を返す必要があります。指定されたリソースに対して値を生成できない場合はnullで引数として使用されます。- パラメーター:
etagGenerator- 使用する HTTP ETag ジェネレーター関数。- 導入:
- 6.1
getEtagGenerator
リソースを提供するときに使用される HTTP ETag ジェネレーター関数を返します。- 戻り値:
- HTTP ETag ジェネレーター関数
- 導入:
- 6.1
setOptimizeLocations
public void setOptimizeLocations(boolean optimizeLocations) 起動時の存在チェックで指定した場所を最適化するかどうかを設定し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。デフォルトは
falseです。これは、ディレクトリの存在を事前に公開できないディレクトリエントリのない zip ファイルに対する防御のためです。ディレクトリエントリとの一貫した jar レイアウトの場合に最適化されたアクセスのために、このフラグをtrueに切り替えます。- 導入:
- 5.3.13
isOptimizeLocations
public boolean isOptimizeLocations()起動時の存在チェックを通じて指定された場所を最適化するかどうかを返し、存在しないディレクトリを事前にフィルタリングして、すべてのリソースアクセスでチェックする必要がないようにします。- 導入:
- 5.3.13
setMediaTypes
静的Resourceのファイル名から抽出されたファイル拡張子と、レスポンスに使用するメディア型との間にマッピングを追加します。マッピングは
MediaTypeFactory.getMediaType(Resource)を介して決定することもできるため、通常、この方法を使用する必要はありません。- パラメーター:
mediaTypes- メディア型のマッピング- 導入:
- 5.3.2
getMediaTypes
configuredメディア型マッピングを返します。- 導入:
- 5.3.2
afterPropertiesSet
インターフェースからコピーされた説明:InitializingBeanすべての Bean プロパティを設定し、BeanFactoryAware、ApplicationContextAwareなどを満たした後、包含BeanFactoryによって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
- 次で指定:
- インターフェース
InitializingBeanのafterPropertiesSet - 例外:
ExceptionSE- 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
initAllowedLocations
protected void initAllowedLocations()構成されたリソースリゾルバーの中からPathResourceResolverを探し、そのクラスで構成されたlocationsと一致するようにallowedLocationsプロパティ(空の場合)を設定します。handle
リソースリクエストを処理します。設定された場所のリストでリクエストされたリソースの存在を確認します。リソースが存在しない場合、
404レスポンスがクライアントに返されます。リソースが存在する場合、Last-Modifiedヘッダーの存在についてリクエストがチェックされ、その値は指定されたリソースの最終変更タイムスタンプと比較され、Last-Modified値が大きい場合は304ステータスコードが返されます。リソースがLast-Modified値よりも新しい場合、またはヘッダーが存在しない場合、リソースのコンテンツリソースは、キャッシュヘッダーが 1 年後に期限切れになるように設定されたレスポンスに書き込まれます。- 次で指定:
- インターフェース
WebHandlerのhandle - パラメーター:
exchange- 現在のサーバー交換- 戻り値:
- リクエスト処理が完了したことを示す
Mono<Void>
getResource
processPath
指定されたリソースパスを処理します。デフォルトの実装は次のものに置き換わります。
- バックスラッシュとスラッシュ。
- スラッシュが 1 つのスラッシュと重複しています。
- 先頭のスラッシュと制御文字(00-1F および 7F)の任意の組み合わせと単一の "/" または ""。たとえば、
" / // foo/bar"は"/foo/bar"になります。
isInvalidPath
無効なリソースパスを識別します。デフォルトでは拒否:- "WEB-INF" または "META-INF" を含むパス
StringUtils.cleanPath(java.lang.String)の呼び出し後の "../" を含むパス。valid URLを表すパス、または先頭のスラッシュが削除された後のパスを表すパス。
注意 : この方法では、先頭の重複する "/" または制御文字(空白など)が削除され、パスが単一の "/" で予測どおりに開始するか、パスが 1 つもないことが想定されています。
- パラメーター:
path- 検証するパス- 戻り値:
- パスが無効な場合は
true、そうでない場合はfalse
setHeaders
protected void setHeaders(ServerWebExchange exchange, Resource resource, @Nullable MediaType mediaType) throws IOExceptionSE レスポンスにヘッダーを設定します。GET リクエストと HEAD リクエストの両方で呼び出されます。- パラメーター:
exchange- 現在の交換resource- 特定されたリソース (非null)mediaType- リソースのメディア型 (非null)- 例外:
IOExceptionSE
toString