|
|
|
|
@ -77,9 +77,9 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@@ -77,9 +77,9 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
|
|
|
|
|
|
|
|
|
|
private static final String HTTP_PATTERN = "(?i)(http|https):"; |
|
|
|
|
|
|
|
|
|
private static final String USERINFO_PATTERN = "([^@/?#]*)"; |
|
|
|
|
private static final String USERINFO_PATTERN = "([^/?#]*)"; |
|
|
|
|
|
|
|
|
|
private static final String HOST_IPV4_PATTERN = "[^\\[/?#:]*"; |
|
|
|
|
private static final String HOST_IPV4_PATTERN = "[^/?#:]*"; |
|
|
|
|
|
|
|
|
|
private static final String HOST_IPV6_PATTERN = "\\[[\\p{XDigit}:.]*[%\\p{Alnum}]*]"; |
|
|
|
|
|
|
|
|
|
@ -252,9 +252,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@@ -252,9 +252,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
|
|
|
|
|
builder.schemeSpecificPart(ssp); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
if (StringUtils.hasLength(scheme) && scheme.startsWith("http") && !StringUtils.hasLength(host)) { |
|
|
|
|
throw new IllegalArgumentException("[" + uri + "] is not a valid HTTP URL"); |
|
|
|
|
} |
|
|
|
|
checkSchemeAndHost(uri, scheme, host); |
|
|
|
|
builder.userInfo(userInfo); |
|
|
|
|
builder.host(host); |
|
|
|
|
if (StringUtils.hasLength(port)) { |
|
|
|
|
@ -296,9 +294,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@@ -296,9 +294,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
|
|
|
|
|
builder.scheme(scheme != null ? scheme.toLowerCase() : null); |
|
|
|
|
builder.userInfo(matcher.group(4)); |
|
|
|
|
String host = matcher.group(5); |
|
|
|
|
if (StringUtils.hasLength(scheme) && !StringUtils.hasLength(host)) { |
|
|
|
|
throw new IllegalArgumentException("[" + httpUrl + "] is not a valid HTTP URL"); |
|
|
|
|
} |
|
|
|
|
checkSchemeAndHost(httpUrl, scheme, host); |
|
|
|
|
builder.host(host); |
|
|
|
|
String port = matcher.group(7); |
|
|
|
|
if (StringUtils.hasLength(port)) { |
|
|
|
|
@ -317,6 +313,15 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@@ -317,6 +313,15 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void checkSchemeAndHost(String uri, @Nullable String scheme, @Nullable String host) { |
|
|
|
|
if (StringUtils.hasLength(scheme) && scheme.startsWith("http") && !StringUtils.hasLength(host)) { |
|
|
|
|
throw new IllegalArgumentException("[" + uri + "] is not a valid HTTP URL"); |
|
|
|
|
} |
|
|
|
|
if (StringUtils.hasLength(host) && host.startsWith("[") && !host.endsWith("]")) { |
|
|
|
|
throw new IllegalArgumentException("Invalid IPV6 host in [" + uri + "]"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Create a new {@code UriComponents} object from the URI associated with |
|
|
|
|
* the given HttpRequest while also overlaying with values from the headers |
|
|
|
|
@ -402,6 +407,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
@@ -402,6 +407,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable {
|
|
|
|
|
if (StringUtils.hasLength(port)) { |
|
|
|
|
builder.port(port); |
|
|
|
|
} |
|
|
|
|
checkSchemeAndHost(origin, scheme, host); |
|
|
|
|
return builder; |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
|