From 499be70a717b8d20c544bc2eac4fe5dacedc7f28 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 17 Dec 2020 17:31:44 +0000 Subject: [PATCH] Update async dispatch check in OncePerRequestFilter We no longer need to rely on an indirect check since Servlet 3.0 is expected so we can just check the DispatcherType of the request. Closes gh-26282 --- .../springframework/web/filter/OncePerRequestFilter.java | 4 ++-- .../web/filter/CharacterEncodingFilterTests.java | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java index a775b8b504e..7aec81b07c2 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -145,7 +145,7 @@ public abstract class OncePerRequestFilter extends GenericFilterBean { * @see WebAsyncManager#hasConcurrentResult() */ protected boolean isAsyncDispatch(HttpServletRequest request) { - return WebAsyncUtils.getAsyncManager(request).hasConcurrentResult(); + return request.getDispatcherType().equals(DispatcherType.ASYNC); } /** diff --git a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java index 19bd055b006..8ab956d66f4 100644 --- a/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java +++ b/spring-web/src/test/java/org/springframework/web/filter/CharacterEncodingFilterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.web.filter; +import javax.servlet.DispatcherType; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -51,6 +52,7 @@ public class CharacterEncodingFilterTests { request.setCharacterEncoding(ENCODING); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(FILTER_NAME))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); HttpServletResponse response = mock(HttpServletResponse.class); FilterChain filterChain = mock(FilterChain.class); @@ -71,6 +73,7 @@ public class CharacterEncodingFilterTests { given(request.getCharacterEncoding()).willReturn(null); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(FILTER_NAME))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); MockHttpServletResponse response = new MockHttpServletResponse(); @@ -92,6 +95,7 @@ public class CharacterEncodingFilterTests { given(request.getCharacterEncoding()).willReturn(ENCODING); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(FILTER_NAME))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); MockHttpServletResponse response = new MockHttpServletResponse(); @@ -112,6 +116,7 @@ public class CharacterEncodingFilterTests { given(request.getCharacterEncoding()).willReturn(null); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(FILTER_NAME))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); MockHttpServletResponse response = new MockHttpServletResponse(); @@ -135,6 +140,7 @@ public class CharacterEncodingFilterTests { given(request.getCharacterEncoding()).willReturn(null); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(CharacterEncodingFilter.class.getName()))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); MockHttpServletResponse response = new MockHttpServletResponse(); @@ -156,6 +162,7 @@ public class CharacterEncodingFilterTests { request.setCharacterEncoding(ENCODING); given(request.getAttribute(WebUtils.ERROR_REQUEST_URI_ATTRIBUTE)).willReturn(null); given(request.getAttribute(filteredName(FILTER_NAME))).willReturn(null); + given(request.getDispatcherType()).willReturn(DispatcherType.REQUEST); HttpServletResponse response = mock(HttpServletResponse.class); FilterChain filterChain = mock(FilterChain.class);