Class AbstractHandlerMapping
- All Implemented Interfaces:
org.springframework.beans.factory.Aware
,org.springframework.beans.factory.BeanNameAware
,org.springframework.context.ApplicationContextAware
,org.springframework.core.Ordered
,org.springframework.web.context.ServletContextAware
,HandlerMapping
- Direct Known Subclasses:
AbstractHandlerMethodMapping
,AbstractUrlHandlerMapping
,RouterFunctionMapping
HandlerMapping
implementations. Supports ordering, a default handler, handler interceptors,
including handler interceptors mapped by path patterns.
Note: This base class does not support exposure of the
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
. Support for this attribute
is up to concrete subclasses, typically based on request URL mappings.
- Since:
- 07.04.2003
- Author:
- Juergen Hoeller, Rossen Stoyanchev, Sam Brannen
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Log
Dedicated "hidden" logger for request mappings.Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
Fields inherited from interface org.springframework.web.servlet.HandlerMapping
BEST_MATCHING_HANDLER_ATTRIBUTE, BEST_MATCHING_PATTERN_ATTRIBUTE, INTROSPECT_TYPE_LEVEL_MAPPING, LOOKUP_PATH, MATRIX_VARIABLES_ATTRIBUTE, PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, URI_TEMPLATE_VARIABLES_ATTRIBUTE
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected HandlerInterceptor
adaptInterceptor
(Object interceptor) Adapt the given interceptor object toHandlerInterceptor
.protected void
detectMappedInterceptors
(List<HandlerInterceptor> mappedInterceptors) Detect beans of typeMappedInterceptor
and add them to the list of mapped interceptors.protected void
extendInterceptors
(List<Object> interceptors) Extension hook that subclasses can override to register additional interceptors, given the configured interceptors (seesetInterceptors(java.lang.Object...)
).protected String
protected final HandlerInterceptor[]
Return the adapted interceptors asHandlerInterceptor
array.protected org.springframework.web.cors.CorsConfiguration
getCorsConfiguration
(Object handler, HttpServletRequest request) Retrieve the CORS configuration for the given handler.org.springframework.web.cors.CorsConfigurationSource
Return theconfigured
CorsConfigurationSource
, if any.protected HandlerExecutionChain
getCorsHandlerExecutionChain
(HttpServletRequest request, HandlerExecutionChain chain, org.springframework.web.cors.CorsConfiguration config) Update the HandlerExecutionChain for CORS-related handling.org.springframework.web.cors.CorsProcessor
Return the configuredCorsProcessor
.Return the default handler for this handler mapping, ornull
if none.final HandlerExecutionChain
getHandler
(HttpServletRequest request) Look up a handler for the given request, falling back to the default handler if no specific one is found.protected HandlerExecutionChain
getHandlerExecutionChain
(Object handler, HttpServletRequest request) Build aHandlerExecutionChain
for the given handler, including applicable interceptors.protected abstract Object
getHandlerInternal
(HttpServletRequest request) Look up a handler for the given request, returningnull
if no specific one is found.protected final MappedInterceptor[]
Return all configuredMappedInterceptor
s as an array.int
getOrder()
org.springframework.util.PathMatcher
Return theconfigured
PathMatcher
.org.springframework.web.util.pattern.PathPatternParser
Return theconfigured
PathPatternParser
, ornull
otherwise which indicates that String pattern matching withAntPathMatcher
is enabled instead.org.springframework.web.util.UrlPathHelper
Return theconfigured
UrlPathHelper
.protected boolean
hasCorsConfigurationSource
(Object handler) Returntrue
if there is aCorsConfigurationSource
for this handler.protected void
Initializes the interceptors.protected void
Initialize the specified interceptors adaptingWebRequestInterceptor
s toHandlerInterceptor
.protected String
initLookupPath
(HttpServletRequest request) Initialize the path to use for request mapping.void
setAlwaysUseFullPath
(boolean alwaysUseFullPath) Deprecated.void
setBeanName
(String name) void
setCorsConfigurations
(Map<String, org.springframework.web.cors.CorsConfiguration> corsConfigurations) Set "global" CORS configuration mappings.void
setCorsConfigurationSource
(org.springframework.web.cors.CorsConfigurationSource source) Set aCorsConfigurationSource
for "global" CORS config.void
setCorsProcessor
(org.springframework.web.cors.CorsProcessor corsProcessor) Configure a customCorsProcessor
to use to apply the matchedCorsConfiguration
for a request.void
setDefaultHandler
(Object defaultHandler) Set the default handler for this handler mapping.void
setInterceptors
(Object... interceptors) Set the interceptors to apply for all handlers mapped by this handler mapping.void
setOrder
(int order) Specify the order value for this HandlerMapping bean.void
setPathMatcher
(org.springframework.util.PathMatcher pathMatcher) Configure the PathMatcher to use.void
setPatternParser
(org.springframework.web.util.pattern.PathPatternParser patternParser) Set thePathPatternParser
to parsepatterns
with for URL path matching.void
setRemoveSemicolonContent
(boolean removeSemicolonContent) Deprecated.as of 6.0, in favor of usingsetUrlPathHelper(UrlPathHelper)
void
setUrlDecode
(boolean urlDecode) Deprecated.as of 6.0, in favor of usingsetUrlPathHelper(UrlPathHelper)
void
setUrlPathHelper
(org.springframework.web.util.UrlPathHelper urlPathHelper) Configure the UrlPathHelper to use for resolution of lookup paths.boolean
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, obtainApplicationContext, requiredContextClass, setApplicationContext
-
Field Details
-
mappingsLogger
Dedicated "hidden" logger for request mappings.
-
-
Constructor Details
-
AbstractHandlerMapping
public AbstractHandlerMapping()
-
-
Method Details
-
setDefaultHandler
Set the default handler for this handler mapping. This handler will be returned if no specific mapping was found.Default is
null
, indicating no default handler. -
getDefaultHandler
Return the default handler for this handler mapping, ornull
if none. -
setPatternParser
public void setPatternParser(@Nullable org.springframework.web.util.pattern.PathPatternParser patternParser) Set thePathPatternParser
to parsepatterns
with for URL path matching. Parsed patterns provide a more modern and efficient alternative to String path matching viaAntPathMatcher
.Note: This property is mutually exclusive with the below properties, all of which are not necessary for parsed patterns and are ignored when a
PathPatternParser
is available:setAlwaysUseFullPath(boolean)
-- parsed patterns always use the full path and consider the servletPath only when a Servlet is mapped by path prefix.setRemoveSemicolonContent(boolean)
-- parsed patterns always ignore semicolon content for path matching purposes, but path parameters remain available for use in controllers via@MatrixVariable
.setUrlDecode(boolean)
-- parsed patterns match one decoded path segment at a time and therefore don't need to decode the full path.setUrlPathHelper(org.springframework.web.util.UrlPathHelper)
-- for parsed patterns, the request path is parsed once inDispatcherServlet
or inServletRequestPathFilter
usingServletRequestPathUtils
and cached in a request attribute.setPathMatcher(org.springframework.util.PathMatcher)
-- a parsed patterns encapsulates the logic for path matching and does need aPathMatcher
.
By default, as of 6.0, this is set to a
PathPatternParser
instance with default settings and therefore use of parsed patterns is enabled. Set this tonull
to switch to String path matching viaAntPathMatcher
instead.- Parameters:
patternParser
- the parser to use- Since:
- 5.3
-
getPatternParser
@Nullable public org.springframework.web.util.pattern.PathPatternParser getPatternParser()Return theconfigured
PathPatternParser
, ornull
otherwise which indicates that String pattern matching withAntPathMatcher
is enabled instead.- Since:
- 5.3
-
setAlwaysUseFullPath
Deprecated.as of 6.0, in favor of usingsetUrlPathHelper(UrlPathHelper)
Shortcut to same property on the configuredUrlPathHelper
.Note: This property is mutually exclusive with and ignored when
setPatternParser(PathPatternParser)
is set.- See Also:
-
UrlPathHelper.setAlwaysUseFullPath(boolean)
-
setUrlDecode
Deprecated.as of 6.0, in favor of usingsetUrlPathHelper(UrlPathHelper)
Shortcut to same property on the underlyingUrlPathHelper
.Note: This property is mutually exclusive with and ignored when
setPatternParser(PathPatternParser)
is set.- See Also:
-
UrlPathHelper.setUrlDecode(boolean)
-
setRemoveSemicolonContent
Deprecated.as of 6.0, in favor of usingsetUrlPathHelper(UrlPathHelper)
Shortcut to same property on the underlyingUrlPathHelper
.Note: This property is mutually exclusive with and ignored when
setPatternParser(PathPatternParser)
is set.- See Also:
-
UrlPathHelper.setRemoveSemicolonContent(boolean)
-
setUrlPathHelper
public void setUrlPathHelper(org.springframework.web.util.UrlPathHelper urlPathHelper) Configure the UrlPathHelper to use for resolution of lookup paths.Note: This property is mutually exclusive with and ignored when
setPatternParser(PathPatternParser)
is set. -
getUrlPathHelper
public org.springframework.web.util.UrlPathHelper getUrlPathHelper()Return theconfigured
UrlPathHelper
. -
setPathMatcher
public void setPathMatcher(org.springframework.util.PathMatcher pathMatcher) Configure the PathMatcher to use.Note: This property is mutually exclusive with and ignored when
setPatternParser(PathPatternParser)
is set.By default this is
AntPathMatcher
.- See Also:
-
AntPathMatcher
-
getPathMatcher
public org.springframework.util.PathMatcher getPathMatcher()Return theconfigured
PathMatcher
. -
setInterceptors
Set the interceptors to apply for all handlers mapped by this handler mapping.Supported interceptor types are
HandlerInterceptor
,WebRequestInterceptor
, andMappedInterceptor
. Mapped interceptors apply only to request URLs that match its path patterns. Mapped interceptor beans are also detected by type during initialization.- Parameters:
interceptors
- array of handler interceptors- See Also:
-
adaptInterceptor(java.lang.Object)
HandlerInterceptor
WebRequestInterceptor
MappedInterceptor
-
setCorsConfigurations
public void setCorsConfigurations(Map<String, org.springframework.web.cors.CorsConfiguration> corsConfigurations) Set "global" CORS configuration mappings. The first matching URL pattern determines theCorsConfiguration
to use which is then furthercombined
with theCorsConfiguration
for the selected handler.This is mutually exclusive with
setCorsConfigurationSource(CorsConfigurationSource)
.- Since:
- 4.2
- See Also:
-
setCorsConfigurationSource
public void setCorsConfigurationSource(org.springframework.web.cors.CorsConfigurationSource source) Set aCorsConfigurationSource
for "global" CORS config. TheCorsConfiguration
determined by the source iscombined
with theCorsConfiguration
for the selected handler.This is mutually exclusive with
setCorsConfigurations(Map)
.- Since:
- 5.1
- See Also:
-
getCorsConfigurationSource
@Nullable public org.springframework.web.cors.CorsConfigurationSource getCorsConfigurationSource()Return theconfigured
CorsConfigurationSource
, if any.- Since:
- 5.3
-
setCorsProcessor
public void setCorsProcessor(org.springframework.web.cors.CorsProcessor corsProcessor) Configure a customCorsProcessor
to use to apply the matchedCorsConfiguration
for a request.By default
DefaultCorsProcessor
is used.- Since:
- 4.2
-
getCorsProcessor
public org.springframework.web.cors.CorsProcessor getCorsProcessor()Return the configuredCorsProcessor
. -
setOrder
public void setOrder(int order) Specify the order value for this HandlerMapping bean.The default value is
Ordered.LOWEST_PRECEDENCE
, meaning non-ordered.- See Also:
-
Ordered.getOrder()
-
getOrder
public int getOrder()- Specified by:
getOrder
in interfaceorg.springframework.core.Ordered
-
setBeanName
- Specified by:
setBeanName
in interfaceorg.springframework.beans.factory.BeanNameAware
-
formatMappingName
-
initApplicationContext
protected void initApplicationContext() throws org.springframework.beans.BeansExceptionInitializes the interceptors.- Overrides:
initApplicationContext
in classorg.springframework.context.support.ApplicationObjectSupport
- Throws:
org.springframework.beans.BeansException
- See Also:
-
extendInterceptors
Extension hook that subclasses can override to register additional interceptors, given the configured interceptors (seesetInterceptors(java.lang.Object...)
).Will be invoked before
initInterceptors()
adapts the specified interceptors intoHandlerInterceptor
instances.The default implementation is empty.
- Parameters:
interceptors
- the configured interceptor List (nevernull
), allowing to add further interceptors before as well as after the existing interceptors
-
detectMappedInterceptors
Detect beans of typeMappedInterceptor
and add them to the list of mapped interceptors.This is called in addition to any
MappedInterceptor
s that may have been provided viasetInterceptors(java.lang.Object...)
, by default adding all beans of typeMappedInterceptor
from the current context and its ancestors. Subclasses can override and refine this policy.- Parameters:
mappedInterceptors
- an empty list to add to
-
initInterceptors
protected void initInterceptors()Initialize the specified interceptors adaptingWebRequestInterceptor
s toHandlerInterceptor
. -
adaptInterceptor
Adapt the given interceptor object toHandlerInterceptor
.By default, the supported interceptor types are
HandlerInterceptor
andWebRequestInterceptor
. Each givenWebRequestInterceptor
is wrapped withWebRequestHandlerInterceptorAdapter
.- Parameters:
interceptor
- the interceptor- Returns:
- the interceptor downcast or adapted to HandlerInterceptor
- See Also:
-
HandlerInterceptor
WebRequestInterceptor
WebRequestHandlerInterceptorAdapter
-
getAdaptedInterceptors
Return the adapted interceptors asHandlerInterceptor
array.- Returns:
- the array of
HandlerInterceptor
s, ornull
if none
-
getMappedInterceptors
Return all configuredMappedInterceptor
s as an array.- Returns:
- the array of
MappedInterceptor
s, ornull
if none
-
usesPathPatterns
public boolean usesPathPatterns()- Specified by:
usesPathPatterns
in interfaceHandlerMapping
-
getHandler
@Nullable public final HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception Look up a handler for the given request, falling back to the default handler if no specific one is found.- Specified by:
getHandler
in interfaceHandlerMapping
- Parameters:
request
- current HTTP request- Returns:
- the corresponding handler instance, or the default handler
- Throws:
Exception
- if there is an internal error- See Also:
-
getHandlerInternal
Look up a handler for the given request, returningnull
if no specific one is found. This method is called bygetHandler(jakarta.servlet.http.HttpServletRequest)
; anull
return value will lead to the default handler, if one is set.On CORS pre-flight requests this method should return a match not for the pre-flight request but for the expected actual request based on the URL path, the HTTP methods from the "Access-Control-Request-Method" header, and the headers from the "Access-Control-Request-Headers" header thus allowing the CORS configuration to be obtained via
getCorsConfiguration(Object, HttpServletRequest)
,Note: This method may also return a pre-built
HandlerExecutionChain
, combining a handler object with dynamically determined interceptors. Statically specified interceptors will get merged into such an existing chain.- Parameters:
request
- current HTTP request- Returns:
- the corresponding handler instance, or
null
if none found - Throws:
Exception
- if there is an internal error
-
initLookupPath
Initialize the path to use for request mapping.When parsed patterns are
enabled
a parsedRequestPath
is expected to have beenparsed
externally by theDispatcherServlet
orServletRequestPathFilter
.Otherwise for String pattern matching via
PathMatcher
the path isresolved
by this method.- Since:
- 5.3
-
getHandlerExecutionChain
protected HandlerExecutionChain getHandlerExecutionChain(Object handler, HttpServletRequest request) Build aHandlerExecutionChain
for the given handler, including applicable interceptors.The default implementation builds a standard
HandlerExecutionChain
with the given handler, the common interceptors of the handler mapping, and anyMappedInterceptors
matching to the current request URL. Interceptors are added in the order they were registered. Subclasses may override this in order to extend/rearrange the list of interceptors.NOTE: The passed-in handler object may be a raw handler or a pre-built
HandlerExecutionChain
. This method should handle those two cases explicitly, either building a newHandlerExecutionChain
or extending the existing chain.For simply adding an interceptor in a custom subclass, consider calling
super.getHandlerExecutionChain(handler, request)
and invokingHandlerExecutionChain.addInterceptor(org.springframework.web.servlet.HandlerInterceptor)
on the returned chain object.- Parameters:
handler
- the resolved handler instance (nevernull
)request
- current HTTP request- Returns:
- the HandlerExecutionChain (never
null
) - See Also:
-
hasCorsConfigurationSource
Returntrue
if there is aCorsConfigurationSource
for this handler.- Since:
- 5.2
-
getCorsConfiguration
@Nullable protected org.springframework.web.cors.CorsConfiguration getCorsConfiguration(Object handler, HttpServletRequest request) Retrieve the CORS configuration for the given handler.- Parameters:
handler
- the handler to check (nevernull
).request
- the current request.- Returns:
- the CORS configuration for the handler, or
null
if none - Since:
- 4.2
-
getCorsHandlerExecutionChain
protected HandlerExecutionChain getCorsHandlerExecutionChain(HttpServletRequest request, HandlerExecutionChain chain, @Nullable org.springframework.web.cors.CorsConfiguration config) Update the HandlerExecutionChain for CORS-related handling.For pre-flight requests, the default implementation replaces the selected handler with a simple HttpRequestHandler that invokes the configured
setCorsProcessor(org.springframework.web.cors.CorsProcessor)
.For actual requests, the default implementation inserts a HandlerInterceptor that makes CORS-related checks and adds CORS headers.
- Parameters:
request
- the current requestchain
- the handler chainconfig
- the applicable CORS configuration (possiblynull
)- Since:
- 4.2
-
setUrlPathHelper(UrlPathHelper)