Do not use Servlet 3.0 API in doOptions()
Refactor FrameworkServlet.doOptions() to capture the "Allow" header by using a HttpServletResponseWrapper. Prior to this commit the HttpServletResponse.getHeader() method was used which is only available in Servlet 3.0 environments. Issue: SPR-10341
This commit is contained in:
parent
c986a1efc1
commit
b27fc0ef30
|
@ -26,6 +26,7 @@ import javax.servlet.ServletContext;
|
|||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpServletResponseWrapper;
|
||||
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
@ -866,10 +867,18 @@ public abstract class FrameworkServlet extends HttpServletBean {
|
|||
return;
|
||||
}
|
||||
}
|
||||
super.doOptions(request, response);
|
||||
String allowedMethods = response.getHeader("Allow");
|
||||
allowedMethods += ", " + RequestMethod.PATCH.name();
|
||||
response.setHeader("Allow", allowedMethods);
|
||||
|
||||
// Use response wrapper for Servlet 2.5 compatibility where
|
||||
// the getHeader() method does not exist
|
||||
super.doOptions(request, new HttpServletResponseWrapper(response) {
|
||||
@Override
|
||||
public void setHeader(String name, String value) {
|
||||
if("Allow".equals(name)) {
|
||||
value = (StringUtils.hasLength(value) ? value + ", " : "") + RequestMethod.PATCH.name();
|
||||
}
|
||||
super.setHeader(name, value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -61,6 +61,8 @@ import org.springframework.web.util.WebUtils;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Matchers.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* @author Rod Johnson
|
||||
|
@ -857,9 +859,10 @@ public class DispatcherServletTests extends TestCase {
|
|||
|
||||
public void testAllowedOptionsIncludesPatchMethod() throws Exception {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest(getServletContext(), "OPTIONS", "/foo");
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
MockHttpServletResponse response = spy(new MockHttpServletResponse());
|
||||
DispatcherServlet servlet = new DispatcherServlet();
|
||||
servlet.service(request, response);
|
||||
verify(response, never()).getHeader(anyString()); // SPR-10341
|
||||
assertThat(response.getHeader("Allow"), equalTo("GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue