Relax SPR-13867 changes for ResourceHttpRequestHandler
Prior to this change, SPR-13867 made sure that any class extending WebContentGenerator would not overwrite existing HTTP "Cache-Control" response headers - set by a filter, a Controller handler, etc. This caused issues with resource handling, since specifying a cache configuration there would not overwrite default headers set by filters, for example by Spring Security. This commit restricts the previous changes to the RequestMappingHandlerAdapter, in order to avoid overwriting header set by a filter or a Controller handler in those cases. Issue: SPR-14005
This commit is contained in:
@@ -148,10 +148,10 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void handle() throws Exception {
|
||||
Class<?>[] parameterTypes = new Class<?>[] { int.class, String.class, String.class, String.class, Map.class,
|
||||
Class<?>[] parameterTypes = new Class<?>[] {int.class, String.class, String.class, String.class, Map.class,
|
||||
Date.class, Map.class, String.class, String.class, TestBean.class, Errors.class, TestBean.class,
|
||||
Color.class, HttpServletRequest.class, HttpServletResponse.class, TestBean.class, TestBean.class,
|
||||
User.class, OtherUser.class, Model.class, UriComponentsBuilder.class };
|
||||
User.class, OtherUser.class, Model.class, UriComponentsBuilder.class};
|
||||
|
||||
String datePattern = "yyyy.MM.dd";
|
||||
String formattedDate = "2011.03.16";
|
||||
@@ -188,12 +188,12 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
assertEquals("headerValue", model.get("header"));
|
||||
assertEquals(date, model.get("dateParam"));
|
||||
|
||||
Map<?,?> map = (Map<?,?>) model.get("headerMap");
|
||||
Map<?, ?> map = (Map<?, ?>) model.get("headerMap");
|
||||
assertEquals("headerValue", map.get("header"));
|
||||
assertEquals("anotherHeaderValue", map.get("anotherHeader"));
|
||||
assertEquals("systemHeaderValue", model.get("systemHeader"));
|
||||
|
||||
map = (Map<?,?>) model.get("paramMap");
|
||||
map = (Map<?, ?>) model.get("paramMap");
|
||||
assertEquals(formattedDate, map.get("dateParam"));
|
||||
assertEquals("paramByConventionValue", map.get("paramByConvention"));
|
||||
|
||||
@@ -229,7 +229,7 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void handleRequestBody() throws Exception {
|
||||
Class<?>[] parameterTypes = new Class<?>[] { byte[].class };
|
||||
Class<?>[] parameterTypes = new Class<?>[] {byte[].class};
|
||||
|
||||
request.setMethod("POST");
|
||||
request.addHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
@@ -246,7 +246,7 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void handleAndValidateRequestBody() throws Exception {
|
||||
Class<?>[] parameterTypes = new Class<?>[] { TestBean.class, Errors.class };
|
||||
Class<?>[] parameterTypes = new Class<?>[] {TestBean.class, Errors.class};
|
||||
|
||||
request.addHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
request.setContent("Hello Server".getBytes("UTF-8"));
|
||||
@@ -262,7 +262,7 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
|
||||
@Test
|
||||
public void handleHttpEntity() throws Exception {
|
||||
Class<?>[] parameterTypes = new Class<?>[] { HttpEntity.class };
|
||||
Class<?>[] parameterTypes = new Class<?>[] {HttpEntity.class};
|
||||
|
||||
request.addHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
request.setContent("Hello Server".getBytes("UTF-8"));
|
||||
@@ -282,7 +282,7 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
// SPR-13867
|
||||
@Test
|
||||
public void handleHttpEntityWithCacheControl() throws Exception {
|
||||
Class<?>[] parameterTypes = new Class<?>[] { HttpEntity.class };
|
||||
Class<?>[] parameterTypes = new Class<?>[] {HttpEntity.class};
|
||||
request.addHeader("Content-Type", "text/plain; charset=utf-8");
|
||||
request.setContent("Hello Server".getBytes("UTF-8"));
|
||||
|
||||
@@ -357,27 +357,27 @@ public class RequestMappingHandlerAdapterIntegrationTests {
|
||||
}
|
||||
|
||||
public String handle(
|
||||
@CookieValue("cookie") int cookie,
|
||||
@PathVariable("pathvar") String pathvar,
|
||||
@RequestHeader("header") String header,
|
||||
@RequestHeader(defaultValue="#{systemProperties.systemHeader}") String systemHeader,
|
||||
@RequestHeader Map<String, Object> headerMap,
|
||||
@RequestParam("dateParam") Date dateParam,
|
||||
@RequestParam Map<String, Object> paramMap,
|
||||
String paramByConvention,
|
||||
@Value("#{request.contextPath}") String value,
|
||||
@ModelAttribute("modelAttr") @Valid TestBean modelAttr,
|
||||
Errors errors,
|
||||
TestBean modelAttrByConvention,
|
||||
Color customArg,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
@SessionAttribute TestBean sessionAttribute,
|
||||
@RequestAttribute TestBean requestAttribute,
|
||||
User user,
|
||||
@ModelAttribute OtherUser otherUser,
|
||||
Model model,
|
||||
UriComponentsBuilder builder) throws Exception {
|
||||
@CookieValue("cookie") int cookie,
|
||||
@PathVariable("pathvar") String pathvar,
|
||||
@RequestHeader("header") String header,
|
||||
@RequestHeader(defaultValue = "#{systemProperties.systemHeader}") String systemHeader,
|
||||
@RequestHeader Map<String, Object> headerMap,
|
||||
@RequestParam("dateParam") Date dateParam,
|
||||
@RequestParam Map<String, Object> paramMap,
|
||||
String paramByConvention,
|
||||
@Value("#{request.contextPath}") String value,
|
||||
@ModelAttribute("modelAttr") @Valid TestBean modelAttr,
|
||||
Errors errors,
|
||||
TestBean modelAttrByConvention,
|
||||
Color customArg,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
@SessionAttribute TestBean sessionAttribute,
|
||||
@RequestAttribute TestBean requestAttribute,
|
||||
User user,
|
||||
@ModelAttribute OtherUser otherUser,
|
||||
Model model,
|
||||
UriComponentsBuilder builder) throws Exception {
|
||||
|
||||
model.addAttribute("cookie", cookie).addAttribute("pathvar", pathvar).addAttribute("header", header)
|
||||
.addAttribute("systemHeader", systemHeader).addAttribute("headerMap", headerMap)
|
||||
|
||||
@@ -549,6 +549,17 @@ public class ResourceHttpRequestHandlerTests {
|
||||
assertEquals(0, this.response.getContentLength());
|
||||
}
|
||||
|
||||
// SPR-14005
|
||||
@Test
|
||||
public void doOverwriteExistingCacheControlHeaders() throws Exception {
|
||||
this.request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "foo.css");
|
||||
this.response.setHeader("Cache-Control", "no-store");
|
||||
|
||||
this.handler.handleRequest(this.request, this.response);
|
||||
|
||||
assertEquals("max-age=3600", this.response.getHeader("Cache-Control"));
|
||||
}
|
||||
|
||||
|
||||
private long dateHeaderAsLong(String responseHeaderName) throws Exception {
|
||||
return dateFormat.parse(this.response.getHeader(responseHeaderName)).getTime();
|
||||
|
||||
Reference in New Issue
Block a user