Class MediaTypeRequestMatcher
java.lang.Object
org.springframework.security.web.util.matcher.MediaTypeRequestMatcher
- All Implemented Interfaces:
RequestMatcher
Allows matching
HttpServletRequest
based upon the MediaType
's resolved
from a ContentNegotiationStrategy
.
By default, the matching process will perform the following:
- The
ContentNegotiationStrategy
will resolve theMediaType
's for the current request - Each matchingMediaTypes that was passed into the constructor will be compared
against the
MediaType
instances resolved from theContentNegotiationStrategy
. - If one of the matchingMediaTypes is compatible with one of the resolved
MediaType
returned from theContentNegotiationStrategy
, then it returns true
GET / Accept: application/json ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); assert matcher.matches(request) == true // returns trueThe following will also return true
GET / Accept: */* ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); assert matcher.matches(request) == true // returns true
Ignoring Media Types
Sometimes you may want to ignore certain types of media types. For example, you may want to match on "application/json" but ignore "*/" sent by a web browser.GET / Accept: */* ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); matcher.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL)); assert matcher.matches(request) == false // returns false
GET / Accept: application/json ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); matcher.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL)); assert matcher.matches(request) == true // returns true
Exact media type comparison
By default as long as theMediaType
discovered by
ContentNegotiationStrategy
returns true for
MediaType.isCompatibleWith(MediaType)
on the matchingMediaTypes, the result of
the match is true. However, sometimes you may want to perform an exact match. This can
be done with the following examples:
GET / Accept: application/json ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); matcher.setUseEquals(true); assert matcher.matches(request) == true // returns true
GET / Accept: application/* ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); matcher.setUseEquals(true); assert matcher.matches(request) == false // returns false
GET / Accept: */* ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy() MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON); matcher.setUseEquals(true); assert matcher.matches(request) == false // returns false
- Since:
- 3.2
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.springframework.security.web.util.matcher.RequestMatcher
RequestMatcher.MatchResult
-
Constructor Summary
ConstructorDescriptionMediaTypeRequestMatcher
(Collection<org.springframework.http.MediaType> matchingMediaTypes) Creates an instanceMediaTypeRequestMatcher
(org.springframework.http.MediaType... matchingMediaTypes) Creates an instanceMediaTypeRequestMatcher
(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, Collection<org.springframework.http.MediaType> matchingMediaTypes) Creates an instanceMediaTypeRequestMatcher
(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, org.springframework.http.MediaType... matchingMediaTypes) Creates an instance -
Method Summary
Modifier and TypeMethodDescriptionboolean
matches
(jakarta.servlet.http.HttpServletRequest request) Decides whether the rule implemented by the strategy matches the supplied request.void
setIgnoredMediaTypes
(Set<org.springframework.http.MediaType> ignoredMediaTypes) Set theMediaType
to ignore from theContentNegotiationStrategy
.void
setUseEquals
(boolean useEquals) If set to true, matches on exactMediaType
, else usesMediaType.isCompatibleWith(MediaType)
.toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.security.web.util.matcher.RequestMatcher
matcher
-
Constructor Details
-
MediaTypeRequestMatcher
public MediaTypeRequestMatcher(org.springframework.http.MediaType... matchingMediaTypes) Creates an instance- Parameters:
matchingMediaTypes
- theMediaType
that will make the http request.- Since:
- 5.2
-
MediaTypeRequestMatcher
Creates an instance- Parameters:
matchingMediaTypes
- theMediaType
that will make the http request.- Since:
- 5.2
-
MediaTypeRequestMatcher
public MediaTypeRequestMatcher(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, org.springframework.http.MediaType... matchingMediaTypes) Creates an instance- Parameters:
contentNegotiationStrategy
- theContentNegotiationStrategy
to usematchingMediaTypes
- theMediaType
that will make theRequestMatcher
return true
-
MediaTypeRequestMatcher
public MediaTypeRequestMatcher(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, Collection<org.springframework.http.MediaType> matchingMediaTypes) Creates an instance- Parameters:
contentNegotiationStrategy
- theContentNegotiationStrategy
to usematchingMediaTypes
- theMediaType
that will make theRequestMatcher
return true
-
-
Method Details
-
matches
public boolean matches(jakarta.servlet.http.HttpServletRequest request) Description copied from interface:RequestMatcher
Decides whether the rule implemented by the strategy matches the supplied request.- Specified by:
matches
in interfaceRequestMatcher
- Parameters:
request
- the request to check for a match- Returns:
- true if the request matches, false otherwise
-
setUseEquals
public void setUseEquals(boolean useEquals) If set to true, matches on exactMediaType
, else usesMediaType.isCompatibleWith(MediaType)
.- Parameters:
useEquals
- specify if equals comparison should be used.
-
setIgnoredMediaTypes
Set theMediaType
to ignore from theContentNegotiationStrategy
. This is useful if for example, you want to match onMediaType.APPLICATION_JSON
but want to ignoreMediaType.ALL
.- Parameters:
ignoredMediaTypes
- theMediaType
's to ignore from theContentNegotiationStrategy
-
toString
-