diff --git a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/RequestCacheConfigurer.java b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/RequestCacheConfigurer.java index 00045baba6..ffcedad60b 100644 --- a/config/src/main/java/org/springframework/security/config/annotation/web/configurers/RequestCacheConfigurer.java +++ b/config/src/main/java/org/springframework/security/config/annotation/web/configurers/RequestCacheConfigurer.java @@ -142,22 +142,12 @@ public final class RequestCacheConfigurer> exte return null; } } + @SuppressWarnings("unchecked") private RequestMatcher createDefaultSavedRequestMatcher(H http) { - ContentNegotiationStrategy contentNegotiationStrategy = http - .getSharedObject(ContentNegotiationStrategy.class); - if (contentNegotiationStrategy == null) { - contentNegotiationStrategy = new HeaderContentNegotiationStrategy(); - } - RequestMatcher notFavIcon = new NegatedRequestMatcher(new AntPathRequestMatcher( "/**/favicon.*")); - MediaTypeRequestMatcher jsonRequest = new MediaTypeRequestMatcher( - contentNegotiationStrategy, MediaType.APPLICATION_JSON); - jsonRequest.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL)); - RequestMatcher notJson = new NegatedRequestMatcher(jsonRequest); - RequestMatcher notXRequestedWith = new NegatedRequestMatcher( new RequestHeaderRequestMatcher("X-Requested-With", "XMLHttpRequest")); @@ -169,9 +159,21 @@ public final class RequestCacheConfigurer> exte matchers.add(0, getRequests); } matchers.add(notFavIcon); - matchers.add(notJson); + matchers.add(notMatchingMediaType(http, MediaType.APPLICATION_JSON)); matchers.add(notXRequestedWith); + matchers.add(notMatchingMediaType(http, MediaType.MULTIPART_FORM_DATA)); return new AndRequestMatcher(matchers); } + + private RequestMatcher notMatchingMediaType(H http, MediaType mediaType) { + ContentNegotiationStrategy contentNegotiationStrategy = http.getSharedObject(ContentNegotiationStrategy.class); + if (contentNegotiationStrategy == null) { + contentNegotiationStrategy = new HeaderContentNegotiationStrategy(); + } + + MediaTypeRequestMatcher jsonRequest = new MediaTypeRequestMatcher(contentNegotiationStrategy, mediaType); + jsonRequest.setIgnoredMediaTypes(Collections.singleton(MediaType.ALL)); + return new NegatedRequestMatcher(jsonRequest); + } }