diff --git a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java index 40a9c3ac..e81021fe 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/client/VaultClients.java @@ -219,6 +219,10 @@ public class VaultClients { @Override public UriBuilder uriString(String uriTemplate) { + if (uriTemplate.startsWith("http:") || uriTemplate.startsWith("https:")) { + return UriComponentsBuilder.fromUriString(uriTemplate); + } + VaultEndpoint endpoint = endpointProvider.getVaultEndpoint(); String baseUri = toBaseUri(endpoint); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java index 3fac83d6..596d88d3 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/client/VaultClientsUnitTests.java @@ -23,6 +23,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.vault.client.VaultClients.PrefixAwareUriBuilderFactory; import org.springframework.vault.client.VaultClients.PrefixAwareUriTemplateHandler; import org.springframework.web.client.RestTemplate; @@ -40,7 +41,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat public class VaultClientsUnitTests { @Test - public void shouldPrefixRelativeUrl() { + public void uriHandlerShouldPrefixRelativeUrl() { VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); PrefixAwareUriTemplateHandler handler = new PrefixAwareUriTemplateHandler( @@ -52,7 +53,7 @@ public class VaultClientsUnitTests { } @Test - public void shouldNotPrefixAbsoluteUrl() { + public void uriHandlerShouldNotPrefixAbsoluteUrl() { VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); PrefixAwareUriTemplateHandler handler = new PrefixAwareUriTemplateHandler( @@ -64,6 +65,31 @@ public class VaultClientsUnitTests { .hasPath("/path/bar"); } + @Test + public void uriBuilderShouldPrefixRelativeUrl() { + + VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); + PrefixAwareUriBuilderFactory handler = new PrefixAwareUriBuilderFactory( + () -> localhost); + + URI uri = handler.expand("/path/{bar}", "bar"); + + assertThat(uri).hasHost("localhost").hasPort(8200).hasPath("/v1/path/bar"); + } + + @Test + public void uriBuilderShouldNotPrefixAbsoluteUrl() { + + VaultEndpoint localhost = VaultEndpoint.create("localhost", 8200); + PrefixAwareUriBuilderFactory handler = new PrefixAwareUriBuilderFactory( + () -> localhost); + + URI uri = handler.expand("https://foo/path/{bar}", "bar"); + + assertThat(uri).hasScheme("https").hasHost("foo").hasPort(-1) + .hasPath("/path/bar"); + } + @Test public void shouldApplyNamespace() {