SPR-8862 Fix issue with matching negated header values.

This commit is contained in:
Rossen Stoyanchev 2011-11-23 15:23:55 +00:00
parent 6eba6f2059
commit e695a21688
3 changed files with 41 additions and 3 deletions

View File

@ -127,12 +127,21 @@ abstract class ServletAnnotationMappingUtils {
}
}
if (negated) {
found = !found;
}
if (!found) {
return negated;
return false;
}
}
else if (!value.equals(request.getHeader(key))) {
return negated;
else {
boolean match = value.equals(request.getHeader(key));
if (negated) {
match = !match;
}
if (!match) {
return false;
}
}
}
}

View File

@ -143,6 +143,17 @@ public class ServletAnnotationMappingUtilsTests {
assertFalse("Invalid request method result", result);
}
// SPR-8862
@Test
public void checkHeadersKeyValueNoMatchWithNegation() {
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/");
request.addHeader("header1", "value1");
String[] headers = new String[]{"header1!=value1"};
boolean result = ServletAnnotationMappingUtils.checkHeaders(headers, request);
assertFalse("Invalid request method result", result);
}
@Test
public void checkHeadersAcceptMatch() {
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/");
@ -161,4 +172,13 @@ public class ServletAnnotationMappingUtilsTests {
assertFalse("Invalid request method result", result);
}
@Test
public void checkHeadersAcceptNoMatchWithNegation() {
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/");
request.addHeader("Accept", "application/pdf");
String[] headers = new String[]{"accept!=application/pdf"};
boolean result = ServletAnnotationMappingUtils.checkHeaders(headers, request);
assertFalse("Invalid request method result", result);
}
}

View File

@ -111,6 +111,15 @@ public class HeadersRequestConditionTests {
assertNotNull(condition.getMatchingCondition(request));
}
@Test
public void headerValueNoMatchNegated() {
HeadersRequestCondition condition = new HeadersRequestCondition("foo!=bar");
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("foo", "bar");
assertNull(condition.getMatchingCondition(request));
}
@Test
public void compareTo() {
MockHttpServletRequest request = new MockHttpServletRequest();