Class ServerHttpObservationFilter
- All Implemented Interfaces:
Filter
,Aware
,BeanNameAware
,DisposableBean
,InitializingBean
,EnvironmentAware
,EnvironmentCapable
,ServletContextAware
Filter
that creates observations
for HTTP exchanges. This collects information about the execution time and
information gathered from the ServerRequestObservationContext
.
Web Frameworks can fetch the current context
as a request attribute
and contribute
additional information to it.
The configured ServerRequestObservationConvention
will use this context to collect
metadata
and attach it to the observation.
- Since:
- 6.0
- Author:
- Brian Clozel
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Name of the request attribute holding thecontext
for the current observation.Fields inherited from class org.springframework.web.filter.OncePerRequestFilter
ALREADY_FILTERED_SUFFIX
Fields inherited from class org.springframework.web.filter.GenericFilterBean
logger
-
Constructor Summary
ConstructorDescriptionServerHttpObservationFilter
(io.micrometer.observation.ObservationRegistry observationRegistry) Create anHttpRequestsObservationFilter
that records observations against the givenObservationRegistry
.ServerHttpObservationFilter
(io.micrometer.observation.ObservationRegistry observationRegistry, ServerRequestObservationConvention observationConvention) Create anHttpRequestsObservationFilter
that records observations against the givenObservationRegistry
with a custom convention. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
doFilterInternal
(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) Same contract as fordoFilter
, but guaranteed to be just invoked once per request within a single request thread.findObservationContext
(HttpServletRequest request) Get the currentobservation context
from the given request, if available.protected boolean
The dispatcher typejakarta.servlet.DispatcherType.ASYNC
means a filter can be invoked in more than one thread over the course of a single request.Methods inherited from class org.springframework.web.filter.OncePerRequestFilter
doFilter, doFilterNestedErrorDispatch, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter, shouldNotFilterErrorDispatch
Methods inherited from class org.springframework.web.filter.GenericFilterBean
addRequiredProperty, afterPropertiesSet, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext
-
Field Details
-
CURRENT_OBSERVATION_CONTEXT_ATTRIBUTE
Name of the request attribute holding thecontext
for the current observation.
-
-
Constructor Details
-
ServerHttpObservationFilter
public ServerHttpObservationFilter(io.micrometer.observation.ObservationRegistry observationRegistry) Create anHttpRequestsObservationFilter
that records observations against the givenObservationRegistry
. The defaultconvention
will be used.- Parameters:
observationRegistry
- the registry to use for recording observations
-
ServerHttpObservationFilter
public ServerHttpObservationFilter(io.micrometer.observation.ObservationRegistry observationRegistry, ServerRequestObservationConvention observationConvention) Create anHttpRequestsObservationFilter
that records observations against the givenObservationRegistry
with a custom convention.- Parameters:
observationRegistry
- the registry to use for recording observationsobservationConvention
- the convention to use for all recorded observations
-
-
Method Details
-
findObservationContext
public static Optional<ServerRequestObservationContext> findObservationContext(HttpServletRequest request) Get the currentobservation context
from the given request, if available.- Parameters:
request
- the current request- Returns:
- the current observation context
-
shouldNotFilterAsyncDispatch
protected boolean shouldNotFilterAsyncDispatch()Description copied from class:OncePerRequestFilter
The dispatcher typejakarta.servlet.DispatcherType.ASYNC
means a filter can be invoked in more than one thread over the course of a single request. Some filters only need to filter the initial thread (e.g. request wrapping) while others may need to be invoked at least once in each additional thread for example for setting up thread locals or to perform final processing at the very end.Note that although a filter can be mapped to handle specific dispatcher types via
web.xml
or in Java through theServletContext
, servlet containers may enforce different defaults with respect to dispatcher types. This flag enforces the design intent of the filter.The default return value is "true", which means the filter will not be invoked during subsequent async dispatches. If "false", the filter will be invoked during async dispatches with the same guarantees of being invoked only once during a request within a single thread.
- Overrides:
shouldNotFilterAsyncDispatch
in classOncePerRequestFilter
-
doFilterInternal
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException Description copied from class:OncePerRequestFilter
Same contract as fordoFilter
, but guaranteed to be just invoked once per request within a single request thread. SeeOncePerRequestFilter.shouldNotFilterAsyncDispatch()
for details.Provides HttpServletRequest and HttpServletResponse arguments instead of the default ServletRequest and ServletResponse ones.
- Specified by:
doFilterInternal
in classOncePerRequestFilter
- Throws:
ServletException
IOException
-