SPR-8612 Allow use of explicit status code in HTTP 1.0 compatibility mode
This commit is contained in:
@@ -389,9 +389,17 @@ public class RedirectView extends AbstractUrlBasedView {
|
||||
HttpServletRequest request, HttpServletResponse response, String targetUrl, boolean http10Compatible)
|
||||
throws IOException {
|
||||
|
||||
String encodedRedirectURL = response.encodeRedirectURL(targetUrl);
|
||||
|
||||
if (http10Compatible) {
|
||||
// Always send status code 302.
|
||||
response.sendRedirect(response.encodeRedirectURL(targetUrl));
|
||||
if (this.statusCode != null) {
|
||||
response.setStatus(this.statusCode.value());
|
||||
response.setHeader("Location", encodedRedirectURL);
|
||||
}
|
||||
else {
|
||||
// Send status code 302 by default.
|
||||
response.sendRedirect(encodedRedirectURL);
|
||||
}
|
||||
}
|
||||
else {
|
||||
HttpStatus statusCode = getHttp11StatusCode(request, response, targetUrl);
|
||||
|
||||
@@ -66,15 +66,27 @@ public class RedirectViewTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void explicitStatusCode() throws Exception {
|
||||
public void explicitStatusCodeHttp11() throws Exception {
|
||||
RedirectView rv = new RedirectView();
|
||||
rv.setUrl("http://url.somewhere.com");
|
||||
rv.setHttp10Compatible(false);
|
||||
rv.setStatusCode(HttpStatus.CREATED);
|
||||
rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
rv.render(new HashMap<String, Object>(), request, response);
|
||||
assertEquals(201, response.getStatus());
|
||||
assertEquals(301, response.getStatus());
|
||||
assertEquals("http://url.somewhere.com", response.getHeader("Location"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void explicitStatusCodeHttp10() throws Exception {
|
||||
RedirectView rv = new RedirectView();
|
||||
rv.setUrl("http://url.somewhere.com");
|
||||
rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
|
||||
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
rv.render(new HashMap<String, Object>(), request, response);
|
||||
assertEquals(301, response.getStatus());
|
||||
assertEquals("http://url.somewhere.com", response.getHeader("Location"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user