Merge pull request #150 from philwebb/SPR-9815

* philwebb-SPR-9815:
  Protect RequestCondition against unkown HTTP methods
  Polish trailing whitespace
master
Rossen Stoyanchev 12 years ago
commit e26da7c2ab
  1. 33
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition.java
  2. 10
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/RequestMethodsRequestConditionTests.java

@ -87,32 +87,43 @@ public final class RequestMethodsRequestCondition extends AbstractRequestConditi
}
/**
* Checks if any of the HTTP request methods match the given request and returns
* an instance that contains the matching request method only.
* Check if any of the HTTP request methods match the given request and
* return an instance that contains the matching HTTP request method only.
*
* @param request the current request
* @return the same instance if the condition contains no request method;
* or a new condition with the matching request method;
* or {@code null} if no request methods match.
* @return the same instance if the condition is empty, a new condition with
* the matched request method, or {@code null} if no request methods match
*/
public RequestMethodsRequestCondition getMatchingCondition(HttpServletRequest request) {
if (methods.isEmpty()) {
if (this.methods.isEmpty()) {
return this;
}
RequestMethod incomingRequestMethod = RequestMethod.valueOf(request.getMethod());
for (RequestMethod method : methods) {
RequestMethod incomingRequestMethod = getRequestMethod(request);
if(incomingRequestMethod != null) {
for (RequestMethod method : this.methods) {
if (method.equals(incomingRequestMethod)) {
return new RequestMethodsRequestCondition(method);
}
}
}
return null;
}
private RequestMethod getRequestMethod(HttpServletRequest request) {
try {
return RequestMethod.valueOf(request.getMethod());
}
catch (IllegalArgumentException e) {
return null;
}
}
/**
* Returns:
* <ul>
* <li>0 if the two conditions contain the same number of HTTP request methods.
* <li>Less than 0 if "this" instance has an HTTP request method but "other" doesn't.
* <li>Greater than 0 "other" has an HTTP request method but "this" doesn't.
* <li>0 if the two conditions contain the same number of HTTP request methods
* <li>Less than 0 if "this" instance has an HTTP request method but "other" doesn't
* <li>Greater than 0 "other" has an HTTP request method but "this" doesn't
* </ul>
*
* <p>It is assumed that both instances have been obtained via

@ -16,6 +16,7 @@
package org.springframework.web.servlet.mvc.condition;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@ -66,6 +67,15 @@ public class RequestMethodsRequestConditionTests {
assertNotNull(condition.getMatchingCondition(new MockHttpServletRequest("HEAD", "")));
}
@Test
public void unknownMethodType() throws Exception {
RequestMethodsRequestCondition condition = new RequestMethodsRequestCondition(RequestMethod.GET, RequestMethod.POST);
MockHttpServletRequest request = new MockHttpServletRequest("PROPFIND", "/foo");
assertNull(condition.getMatchingCondition(request));
}
@Test
public void compareTo() {
RequestMethodsRequestCondition condition1 = new RequestMethodsRequestCondition(RequestMethod.GET, RequestMethod.HEAD);

Loading…
Cancel
Save