Guard Config Data registration against absent SessionManager.

If the session manager is absent, we no not attemp to look it up. That is the case if no authentication is configured.

Closes gh-705
This commit is contained in:
Mark Paluch
2023-10-23 11:44:09 +02:00
parent 26c2152b71
commit a4b792e6ba
3 changed files with 19 additions and 2 deletions

View File

@@ -252,7 +252,8 @@ public class VaultConfigDataLoader implements ConfigDataLoader<VaultConfigLocati
VaultConfiguration vaultConfiguration) {
registerIfAbsent(bootstrap, "secretLeaseContainer", SecretLeaseContainer.class, ctx -> {
SessionManager sessionManager = ctx.get(SessionManager.class);
SessionManager sessionManager = ctx.isRegistered(SessionManager.class) ? ctx.get(SessionManager.class)
: null;
SecretLeaseContainer container = vaultConfiguration.createSecretLeaseContainer(ctx.get(VaultTemplate.class),
() -> ctx.get(TaskSchedulerWrapper.class).getTaskScheduler(), sessionManager);

View File

@@ -24,6 +24,7 @@ import java.util.function.Supplier;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.vault.config.VaultProperties.Ssl;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.lang.Nullable;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.util.StringUtils;
@@ -182,7 +183,7 @@ final class VaultConfiguration {
}
SecretLeaseContainer createSecretLeaseContainer(VaultOperations vaultOperations,
Supplier<TaskScheduler> taskSchedulerSupplier, SessionManager sessionManager) {
Supplier<TaskScheduler> taskSchedulerSupplier, @Nullable SessionManager sessionManager) {
VaultProperties.ConfigLifecycle lifecycle = this.vaultProperties.getConfig().getLifecycle();

View File

@@ -63,6 +63,21 @@ public class VaultConfigDataLoaderIntegrationTests extends IntegrationTestSuppor
}
}
@Test
public void shouldConsiderNoAuthentication() {
SpringApplication application = new SpringApplication(Config.class);
application.setWebApplicationType(WebApplicationType.NONE);
try (ConfigurableApplicationContext context = application.run("--spring.application.name=my-config-loader",
"--spring.config.import=vault:", "--spring.cloud.vault.authentication=NONE")) {
// while the Vault startup leads to Status 403 Forbidden [secret/application],
// we expect that the application can still boot up.
assertThat(context).isNotNull();
}
}
@Test
public void vaultLocationEndingWithSlashShouldFail() {