spring-projects / spring-vault

Provides familiar Spring abstractions for HashiCorp Vault
https://spring.io/projects/spring-vault
Apache License 2.0
283 stars 186 forks source link

server redirect too many time when using custom resttemplatebuilder #631

Closed adejoux closed 3 years ago

adejoux commented 3 years ago

Hello,

When creating a vaulttemplate with resttemplatebuilder:

RestTemplateBuilder restTemplateBuilder = RestTemplateBuilder.builder()
                    .requestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))
                    .customizers(
                            restTemplate -> restTemplate.getInterceptors().add(new RestTemplateLoggingInterceptor()))
                    .endpoint(vaultMainConfiguration.vaultEndpoint());

VaultTemplate vaultTemplate = new VaultTemplate(restTemplateBuilder, vaultMainConfiguration.sessionManager());

The error message is:

unable to get API key: I/O error on GET request for "https://vaultserver:443/v1/mynamespace/secrets/data/mysecret": Server redirected too many  times (20); nested exception is java.net.ProtocolException: Server redirected too man y  times (20)

It's working properly when I use this way of making the vaulttemplate:

VaultTemplate vaultTemplate = new VaultTemplate(vaultMainConfiguration.vaultEndpoint(), vaultMainConfiguration.clientAuthentication());

My goal is to have a logging facility for vaulttemplate request. It's why I use the resttemplatebuilder but I don't see why it's not working.

Is it a mistake on my side or a bug?

Thanks,

Alain

mp911de commented 3 years ago

Have you tried different HTTP clients such as Apache HTTP Client vs. the JDK built-in client?

adejoux commented 3 years ago

Hello,

Thanks. I didn't think about it. I used the apache http client with wire logging and I found my bug:

            RestTemplateBuilder restTemplateBuilder = RestTemplateBuilder.builder()
                    .requestFactory(new HttpComponentsClientHttpRequestFactory())
                    .customizers(
                            restTemplate -> restTemplate.getInterceptors().add(new RestTemplateLoggingInterceptor()))
                    .endpoint(vaultEndpoint);

I added a X-VAULT-NAMESPACE header with a value "/". It was my error.

Thanks for the help.