Class HandlerMappingIntrospector
- All Implemented Interfaces:
- Aware,- InitializingBean,- ApplicationContextAware,- CorsConfigurationSource,- PreFlightRequestHandler
HandlerMapping that would
 serve a specific request.
 Provides the following methods:
- getMatchableHandlerMapping(jakarta.servlet.http.HttpServletRequest)— obtain a- HandlerMappingto check request-matching criteria against.
- getCorsConfiguration(jakarta.servlet.http.HttpServletRequest)— obtain the CORS configuration for the request.
Note that this is primarily an SPI to allow Spring Security to align its pattern matching with the same pattern matching that would be used in Spring MVC for a given request, in order to avoid security issues.
Use of this component incurs the performance overhead of mapping the
 request, and should not be repeated multiple times per request.
 createCacheFilter() exposes a Filter to cache the results.
 Applications that rely on Spring Security don't need to deploy this Filter
 since Spring Security doe that. However, other custom security layers, used
 in place of Spring Security that use this component should deploy the cache
 Filter with requirements described in the Javadoc for the method.
- Since:
- 4.3.1
- Author:
- Rossen Stoyanchev
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic final classContainer for aMatchableHandlerMappingandCorsConfigurationfor a given request matched by dispatcher type and requestURI.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.booleanFilterthat looks up theMatchableHandlerMappingandCorsConfigurationfor the request proactively before delegating to the rest of the chain, caching the result in a request attribute, and restoring it after the chain returns.getCorsConfiguration(HttpServletRequest request) Return aCorsConfigurationbased on the incoming request.Return the configured or detectedHandlerMappings.Find theHandlerMappingthat would handle the given request and return aMatchableHandlerMappingto use for path matching.intReturn the configured limit on security patterns to cache.voidhandlePreFlight(HttpServletRequest request, HttpServletResponse response) Find the matchingHandlerMappingfor the request, and invoke the handler it returns as aPreFlightRequestHandler.voidresetCache(ServletRequest request, HandlerMappingIntrospector.CachedResult cachedResult) Restore a previousHandlerMappingIntrospector.CachedResult.voidsetApplicationContext(ApplicationContext applicationContext) Set the ApplicationContext that this object runs in.setCache(HttpServletRequest request) Perform a lookup and save theHandlerMappingIntrospector.CachedResultas a request attribute.voidsetPatternCacheLimit(int patternCacheLimit) Set a limit on the maximum number of security patterns passed intoMatchableHandlerMapping.match(jakarta.servlet.http.HttpServletRequest, java.lang.String)at runtime to cache.
- 
Constructor Details- 
HandlerMappingIntrospectorpublic HandlerMappingIntrospector()
 
- 
- 
Method Details- 
setPatternCacheLimitpublic void setPatternCacheLimit(int patternCacheLimit) Set a limit on the maximum number of security patterns passed intoMatchableHandlerMapping.match(jakarta.servlet.http.HttpServletRequest, java.lang.String)at runtime to cache.By default, this is set to 2048. - Parameters:
- patternCacheLimit- the limit to use
- Since:
- 6.2.8
 
- 
getPatternCacheLimitpublic int getPatternCacheLimit()Return the configured limit on security patterns to cache.- Since:
- 6.2.8
 
- 
setApplicationContextDescription copied from interface:ApplicationContextAwareSet the ApplicationContext that this object runs in. Normally this call will be used to initialize the object.Invoked after population of normal bean properties but before an init callback such as InitializingBean.afterPropertiesSet()or a custom init-method. Invoked afterResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader),ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)andMessageSourceAware, if applicable.- Specified by:
- setApplicationContextin interface- ApplicationContextAware
- Parameters:
- applicationContext- the ApplicationContext object to be used by this object
- See Also:
 
- 
afterPropertiesSetpublic void afterPropertiesSet()Description 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
 
- 
getHandlerMappingsReturn the configured or detectedHandlerMappings.
- 
allHandlerMappingsUsePathPatternParserpublic boolean allHandlerMappingsUsePathPatternParser()- Since:
- 6.2
 
- 
handlePreFlightpublic void handlePreFlight(HttpServletRequest request, HttpServletResponse response) throws Exception Find the matchingHandlerMappingfor the request, and invoke the handler it returns as aPreFlightRequestHandler.- Specified by:
- handlePreFlightin interface- PreFlightRequestHandler
- Parameters:
- request- current HTTP request
- response- current HTTP response
- Throws:
- NoHandlerFoundException- if no handler matches the request
- Exception
- Since:
- 6.2
 
- 
createCacheFilterFilterthat looks up theMatchableHandlerMappingandCorsConfigurationfor the request proactively before delegating to the rest of the chain, caching the result in a request attribute, and restoring it after the chain returns.Note: Applications that rely on Spring Security do not use this component directly and should not deploy the filter instead allowing Spring Security to do it. Other custom security layers used in place of Spring Security that also rely on HandlerMappingIntrospectorshould deploy this filter ahead of other filters where lookups are performed, and should also make sure the filter is configured to handle all dispatcher types.- Returns:
- the Filter instance to use
- Since:
- 6.0.14
 
- 
setCachePerform a lookup and save theHandlerMappingIntrospector.CachedResultas a request attribute. This method can be invoked from a filter before subsequent calls togetMatchableHandlerMapping(HttpServletRequest)andgetCorsConfiguration(HttpServletRequest)to avoid repeated lookups.- Parameters:
- request- the current request
- Returns:
- the previous HandlerMappingIntrospector.CachedResult, if there is one from a parent dispatch
- Since:
- 6.0.14
 
- 
resetCachepublic void resetCache(ServletRequest request, @Nullable HandlerMappingIntrospector.CachedResult cachedResult) Restore a previousHandlerMappingIntrospector.CachedResult. This method can be invoked from a filter after delegating to the rest of the chain.- Since:
- 6.0.14
 
- 
getMatchableHandlerMapping@Nullable public MatchableHandlerMapping getMatchableHandlerMapping(HttpServletRequest request) throws Exception Find theHandlerMappingthat would handle the given request and return aMatchableHandlerMappingto use for path matching.- Parameters:
- request- the current request
- Returns:
- the resolved MatchableHandlerMapping, ornull
- Throws:
- IllegalStateException- if the matching HandlerMapping is not an instance of- MatchableHandlerMapping
- Exception- if any of the HandlerMapping's raise an exception
 
- 
getCorsConfigurationDescription copied from interface:CorsConfigurationSourceReturn aCorsConfigurationbased on the incoming request.- Specified by:
- getCorsConfigurationin interface- CorsConfigurationSource
- Returns:
- the associated CorsConfiguration, ornullif none
 
 
-