Remove unnecessary iteration over headers

The use of LinkedCaseInsensitiveMap, going back to 3.0, makes it
unnecessary to iterate over keys which can cause
ConcurrentModificationException.

Closes gh-23460
This commit is contained in:
Rossen Stoyanchev 2019-08-21 13:34:17 +03:00
parent 6d8bf3466c
commit a7bb5ca473
5 changed files with 28 additions and 25 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -91,8 +91,11 @@ class HeaderValueHolder {
* @param headers the Map of header names to HeaderValueHolders
* @param name the name of the desired header
* @return the corresponding HeaderValueHolder, or {@code null} if none found
* @deprecated as of 5.1.10 in favor of using
* {@link org.springframework.util.LinkedCaseInsensitiveMap}.
*/
@Nullable
@Deprecated
public static HeaderValueHolder getByName(Map<String, HeaderValueHolder> headers, String name) {
Assert.notNull(name, "Header name must not be null");
for (String headerName : headers.keySet()) {

View File

@ -1038,7 +1038,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
private void doAddHeaderValue(String name, @Nullable Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Assert.notNull(value, "Header value must not be null");
if (header == null || replace) {
header = new HeaderValueHolder();
@ -1078,7 +1078,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
*/
@Override
public long getDateHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Object value = (header != null ? header.getValue() : null);
if (value instanceof Date) {
return ((Date) value).getTime();
@ -1115,13 +1115,13 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
@Nullable
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getStringValue() : null);
}
@Override
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<>());
}
@ -1132,7 +1132,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
public int getIntHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Object value = (header != null ? header.getValue() : null);
if (value instanceof Number) {
return ((Number) value).intValue();

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -380,7 +380,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public boolean containsHeader(String name) {
return (HeaderValueHolder.getByName(this.headers, name) != null);
return (this.headers.get(name) != null);
}
/**
@ -405,7 +405,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
@Nullable
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getStringValue() : null);
}
@ -419,7 +419,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
*/
@Override
public List<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
if (header != null) {
return header.getStringValues();
}
@ -436,7 +436,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
*/
@Nullable
public Object getHeaderValue(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getValue() : null);
}
@ -446,7 +446,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
* @return the associated header values, or an empty List if none
*/
public List<Object> getHeaderValues(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
if (header != null) {
return header.getValues();
}
@ -614,7 +614,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
}
private void doAddHeaderValue(String name, Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Assert.notNull(value, "Header value must not be null");
if (header == null) {
header = new HeaderValueHolder();

View File

@ -1038,7 +1038,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
private void doAddHeaderValue(String name, @Nullable Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Assert.notNull(value, "Header value must not be null");
if (header == null || replace) {
header = new HeaderValueHolder();
@ -1078,7 +1078,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
*/
@Override
public long getDateHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Object value = (header != null ? header.getValue() : null);
if (value instanceof Date) {
return ((Date) value).getTime();
@ -1115,13 +1115,13 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
@Nullable
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getStringValue() : null);
}
@Override
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<>());
}
@ -1132,7 +1132,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
@Override
public int getIntHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Object value = (header != null ? header.getValue() : null);
if (value instanceof Number) {
return ((Number) value).intValue();

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -380,7 +380,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
public boolean containsHeader(String name) {
return (HeaderValueHolder.getByName(this.headers, name) != null);
return (this.headers.get(name) != null);
}
/**
@ -405,7 +405,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override
@Nullable
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getStringValue() : null);
}
@ -419,7 +419,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
*/
@Override
public List<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
if (header != null) {
return header.getStringValues();
}
@ -436,7 +436,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
*/
@Nullable
public Object getHeaderValue(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
return (header != null ? header.getValue() : null);
}
@ -446,7 +446,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
* @return the associated header values, or an empty List if none
*/
public List<Object> getHeaderValues(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
if (header != null) {
return header.getValues();
}
@ -614,7 +614,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
}
private void doAddHeaderValue(String name, Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
HeaderValueHolder header = this.headers.get(name);
Assert.notNull(value, "Header value must not be null");
if (header == null) {
header = new HeaderValueHolder();