Installate la factory proxy di Spring Cloud Vault prima di application.run
Usate l'hook del registro bootstrap per l'accesso a ConfigData, che può avvenire prima che esistano i normali bean dell'applicazione.
Quando Vault fornisce ConfigData, la sua prima richiesta può avvenire prima che esista un normale bean di personalizzazione del proxy. Installate invece la factory delle richieste tramite il registro bootstrap.
Per uno stack Spring Framework 6.1 o successivo:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.http.HttpClient;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.vault.config.AbstractVaultConfiguration
.ClientFactoryWrapper;
var http = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example.net", 8080)))
.build();
application.addBootstrapRegistryInitializer(registry ->
registry.register(ClientFactoryWrapper.class, context ->
new ClientFactoryWrapper(
new JdkClientHttpRequestFactory(http))));application è il SpringApplication esistente. Aggiungete questo inizializzatore prima di chiamare run, conservando l'URI di Vault e le impostazioni di autenticazione.
ClientFactoryWrapper espone questa factory all'infrastruttura bootstrap di Vault; non installa un valore predefinito a livello di applicazione per i client HTTP non correlati.
Usate l'insieme di dipendenze Cloud Vault/Boot compatibile del progetto. Gli esempi di Apache 4 non possono essere copiati nella factory delle richieste Apache 5 di Spring Framework 6.
Rendete disponibile l'indirizzo del proxy anche prima del bootstrap. Per un server Vault raggiungibile pubblicamente su una rotta che consente proxy pubblici, scegliete un candidato HTTP da l'elenco dei proxy HTTP prima dell'avvio dell'applicazione. Se è memorizzato solo in Vault, l'applicazione non può scoprire la rotta necessaria per quella prima richiesta a Vault.