Class ResourceWebHandler
- All Implemented Interfaces:
- InitializingBean,- WebHandler
HttpRequestHandler that serves static resources in an optimized way
 according to the guidelines of Page Speed, YSlow, etc.
 The "locations" property takes a list of Spring
 Resource locations from which static resources are allowed to
 be served by this handler. Resources could be served from a classpath location,
 e.g. "classpath:/META-INF/public-web-resources/", allowing convenient packaging
 and serving of resources such as .js, .css, and others in jar files.
 
This request handler may also be configured with a
 resourcesResolver and
 resourceTransformer chains to support
 arbitrary resolution and transformation of resources being served. By default
 a PathResourceResolver simply finds resources based on the configured
 "locations". An application can configure additional resolvers and
 transformers such as the VersionResourceResolver which can resolve
 and prepare URLs for resources with a version in the URL.
 
This handler also properly evaluates the Last-Modified header (if
 present) so that a 304 status code will be returned as appropriate,
 avoiding unnecessary overhead for resources that are already cached by the
 client.
- Since:
- 5.0
- Author:
- Rossen Stoyanchev, Brian Clozel, Juergen Hoeller
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.Return theCacheControlinstance to build the Cache-Control HTTP response header.Return theListofResourcepaths to use as sources for serving static resources.Return the configured location values.Return theconfiguredmedia type mappings.protected reactor.core.publisher.Mono<Resource>getResource(ServerWebExchange exchange) Return the configured resource message writer.Return the list of configured resource resolvers.Return the list of configured resource transformers.reactor.core.publisher.Mono<Void>handle(ServerWebExchange exchange) Processes a resource request.protected voidLook for aPathResourceResolveramong the configured resource resolvers and set itsallowedLocationsproperty (if empty) to match thelocationsconfigured on this class.protected booleanisInvalidPath(String path) Identifies invalid resource paths.booleanReturn whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.booleanReturn whether theResource.lastModified()information is used to drive HTTP responses when serving static resources.protected StringprocessPath(String path) Process the given resource path.voidsetCacheControl(CacheControl cacheControl) Set theCacheControlinstance to build the Cache-Control HTTP response header.protected voidsetHeaders(ServerWebExchange exchange, Resource resource, MediaType mediaType) Set headers on the response.voidsetLocations(List<Resource> locations) Set theListofResourcepaths to use as sources for serving static resources.voidsetLocationValues(List<String> locationValues) Accepts a list of String-based location values to be resolved intoResourcelocations.voidsetMediaTypes(Map<String, MediaType> mediaTypes) Add mappings between file extensions extracted from the filename of staticResources and the media types to use for the response.voidsetOptimizeLocations(boolean optimizeLocations) Set whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.voidsetResourceHttpMessageWriter(ResourceHttpMessageWriter httpMessageWriter) Configure theResourceHttpMessageWriterto use.voidsetResourceLoader(ResourceLoader resourceLoader) Provide the ResourceLoader to loadlocation valueswith.voidsetResourceResolvers(List<ResourceResolver> resourceResolvers) Configure the list ofResourceResolversto use.voidsetResourceTransformers(List<ResourceTransformer> resourceTransformers) Configure the list ofResourceTransformersto use.voidsetUseLastModified(boolean useLastModified) Set whether we should look at theResource.lastModified()when serving resources and use this information to drive"Last-Modified"HTTP response headers.toString()
- 
Constructor Details- 
ResourceWebHandlerpublic ResourceWebHandler()
 
- 
- 
Method Details- 
setResourceLoaderProvide the ResourceLoader to loadlocation valueswith.- Since:
- 5.1
 
- 
setLocationValuesAccepts a list of String-based location values to be resolved intoResourcelocations.- Since:
- 5.1
 
- 
getLocationValuesReturn the configured location values.- Since:
- 5.1
 
- 
setLocationsSet theListofResourcepaths to use as sources for serving static resources.
- 
getLocationsReturn theListofResourcepaths to use as sources for serving static resources.Note that if locationValuesare provided, instead of loaded Resource-based locations, this method will return empty until after initialization viaafterPropertiesSet().Note: As of 5.3.11 the list of locations may be filtered to exclude those that don't actually exist and therefore the list returned from this method may be a subset of all given locations. See setOptimizeLocations(boolean).
- 
setResourceResolversConfigure the list ofResourceResolversto use.By default PathResourceResolveris configured. If using this property, it is recommended to addPathResourceResolveras the last resolver.
- 
getResourceResolversReturn the list of configured resource resolvers.
- 
setResourceTransformersConfigure the list ofResourceTransformersto use.By default no transformers are configured for use. 
- 
getResourceTransformersReturn the list of configured resource transformers.
- 
setResourceHttpMessageWriterConfigure theResourceHttpMessageWriterto use.By default a ResourceHttpMessageWriterwill be configured.
- 
getResourceHttpMessageWriterReturn the configured resource message writer.
- 
setCacheControlSet theCacheControlinstance to build the Cache-Control HTTP response header.
- 
getCacheControlReturn theCacheControlinstance to build the Cache-Control HTTP response header.
- 
setUseLastModifiedpublic void setUseLastModified(boolean useLastModified) Set whether we should look at theResource.lastModified()when serving resources and use this information to drive"Last-Modified"HTTP response headers.This option is enabled by default and should be turned off if the metadata of the static files should be ignored. - Since:
- 5.3
 
- 
isUseLastModifiedpublic boolean isUseLastModified()Return whether theResource.lastModified()information is used to drive HTTP responses when serving static resources.- Since:
- 5.3
 
- 
setOptimizeLocationspublic void setOptimizeLocations(boolean optimizeLocations) Set whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.The default is false, for defensiveness against zip files without directory entries which are unable to expose the existence of a directory upfront. Switch this flag totruefor optimized access in case of a consistent jar layout with directory entries.- Since:
- 5.3.13
 
- 
isOptimizeLocationspublic boolean isOptimizeLocations()Return whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.- Since:
- 5.3.13
 
- 
setMediaTypesAdd mappings between file extensions extracted from the filename of staticResources and the media types to use for the response.Use of this method is typically not necessary since mappings can be also determined via MediaTypeFactory.getMediaType(Resource).- Parameters:
- mediaTypes- media type mappings
- Since:
- 5.3.2
 
- 
getMediaTypesReturn theconfiguredmedia type mappings.- Since:
- 5.3.2
 
- 
afterPropertiesSetDescription copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set. - Specified by:
- afterPropertiesSetin interface- InitializingBean
- Throws:
- Exception- in the event of misconfiguration (such as failure to set an essential property) or if initialization fails for any other reason
 
- 
initAllowedLocationsprotected void initAllowedLocations()Look for aPathResourceResolveramong the configured resource resolvers and set itsallowedLocationsproperty (if empty) to match thelocationsconfigured on this class.
- 
handleProcesses a resource request.Checks for the existence of the requested resource in the configured list of locations. If the resource does not exist, a 404response will be returned to the client. If the resource exists, the request will be checked for the presence of theLast-Modifiedheader, and its value will be compared against the last-modified timestamp of the given resource, returning a304status code if theLast-Modifiedvalue is greater. If the resource is newer than theLast-Modifiedvalue, or the header is not present, the content resource of the resource will be written to the response with caching headers set to expire one year in the future.- Specified by:
- handlein interface- WebHandler
- Parameters:
- exchange- the current server exchange
- Returns:
- Mono<Void>to indicate when request handling is complete
 
- 
getResource
- 
processPathProcess the given resource path.The default implementation replaces: - Backslash with forward slash.
- Duplicate occurrences of slash with a single slash.
- Any combination of leading slash and control characters (00-1F and 7F)
 with a single "/" or "". For example " / // foo/bar"becomes"/foo/bar".
 
- 
isInvalidPathIdentifies invalid resource paths. By default rejects:- Paths that contain "WEB-INF" or "META-INF"
- Paths that contain "../" after a call to
 StringUtils.cleanPath(java.lang.String).
- Paths that represent a valid URLor would represent one after the leading slash is removed.
 Note: this method assumes that leading, duplicate '/' or control characters (e.g. white space) have been trimmed so that the path starts predictably with a single '/' or does not have one. - Parameters:
- path- the path to validate
- Returns:
- trueif the path is invalid,- falseotherwise
 
- 
setHeadersprotected void setHeaders(ServerWebExchange exchange, Resource resource, @Nullable MediaType mediaType) throws IOException Set headers on the response. Called for both GET and HEAD requests.- Parameters:
- exchange- current exchange
- resource- the identified resource (never- null)
- mediaType- the resource's media type (never- null)
- Throws:
- IOException
 
- 
toString
 
-