Class MediaTypeRequestMatcher

java.lang.Object
org.springframework.security.web.util.matcher.MediaTypeRequestMatcher
All Implemented Interfaces:
RequestMatcher

public final class MediaTypeRequestMatcher extends Object implements 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 the MediaType 's for the current request
  • Each matchingMediaTypes that was passed into the constructor will be compared against the MediaType instances resolved from the ContentNegotiationStrategy.
  • If one of the matchingMediaTypes is compatible with one of the resolved MediaType returned from the ContentNegotiationStrategy, then it returns true
For example, consider the following example
 GET /
 Accept: application/json

 ContentNegotiationStrategy negotiationStrategy = new HeaderContentNegotiationStrategy()
 MediaTypeRequestMatcher matcher = new MediaTypeRequestMatcher(negotiationStrategy, MediaType.APPLICATION_JSON);
 assert matcher.matches(request) == true // returns true
 
The 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 the MediaType 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

    Constructors
    Constructor
    Description
    MediaTypeRequestMatcher(Collection<org.springframework.http.MediaType> matchingMediaTypes)
    Creates an instance
    MediaTypeRequestMatcher(org.springframework.http.MediaType... matchingMediaTypes)
    Creates an instance
    MediaTypeRequestMatcher(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, Collection<org.springframework.http.MediaType> matchingMediaTypes)
    Creates an instance
    MediaTypeRequestMatcher(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, org.springframework.http.MediaType... matchingMediaTypes)
    Creates an instance
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    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 the MediaType to ignore from the ContentNegotiationStrategy.
    void
    setUseEquals(boolean useEquals)
    If set to true, matches on exact MediaType, else uses MediaType.isCompatibleWith(MediaType).
     

    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 - the MediaType that will make the http request.
      Since:
      5.2
    • MediaTypeRequestMatcher

      public MediaTypeRequestMatcher(Collection<org.springframework.http.MediaType> matchingMediaTypes)
      Creates an instance
      Parameters:
      matchingMediaTypes - the MediaType 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 - the ContentNegotiationStrategy to use
      matchingMediaTypes - the MediaType that will make the RequestMatcher return true
    • MediaTypeRequestMatcher

      public MediaTypeRequestMatcher(org.springframework.web.accept.ContentNegotiationStrategy contentNegotiationStrategy, Collection<org.springframework.http.MediaType> matchingMediaTypes)
      Creates an instance
      Parameters:
      contentNegotiationStrategy - the ContentNegotiationStrategy to use
      matchingMediaTypes - the MediaType that will make the RequestMatcher 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 interface RequestMatcher
      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 exact MediaType, else uses MediaType.isCompatibleWith(MediaType).
      Parameters:
      useEquals - specify if equals comparison should be used.
    • setIgnoredMediaTypes

      public void setIgnoredMediaTypes(Set<org.springframework.http.MediaType> ignoredMediaTypes)
      Set the MediaType to ignore from the ContentNegotiationStrategy. This is useful if for example, you want to match on MediaType.APPLICATION_JSON but want to ignore MediaType.ALL.
      Parameters:
      ignoredMediaTypes - the MediaType's to ignore from the ContentNegotiationStrategy
    • toString

      public String toString()
      Overrides:
      toString in class Object