Spring Vault 연동 예제
SpringBoot 버전 : 2.3.9.RELEASE
Spring 버전 : 5.2.13.RELEASE
Vault 버전 : 2.2.3.RELEASE
config 설정은 따로 빼서 처리해도 되나, 소스가 복잡해지는것을 막기 위해 하나의 클래스에서 모두 처리
@Configuration
public class VaultConfig extends AbstractVaultConfiguration {
@Value("${vault_url}")
private URI url;
@Value("${vault_role_id}")
private String roleId;
@Value("${vault_secret_id}")
private String secretId;
@Value("${datasource_url}")
private String databaseUrl;
@Value("${vault_path}")
private String vaultPath;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Override
public VaultEndpoint vaultEndpoint() {
return VaultEndpoint.from(url);
}
@Override
public ClientAuthentication clientAuthentication() {
AppRoleAuthenticationOptions options = AppRoleAuthenticationOptions.builder()
.roleId(AppRoleAuthenticationOptions.RoleId.provided(roleId))
.secretId(AppRoleAuthenticationOptions.SecretId.provided(secretId))
.build();
return new AppRoleAuthentication(options, restOperations());
}
@Primary
@Bean
public DataSource dataSource() {
VaultDTO vaultDto = Objects.requireNonNull(vaultTemplate().read(vaultPath, VaultDTO.class)).getData();
return DataSourceBuilder
.create()
.driverClassName(driverClassName)
.url(databaseUrl)
.username(vaultDto.getUsername())
.password(vaultDto.getPassword())
.build();
}
}
Vault가 버전업되면서 VaultTemplate를 자동 주입받아 사용하지 못하도록 변경되었다.(ThreadSafe)
따라서 static 함수인 vaultTemplate()을 호출하여 vaultTemplate 클래스에 접근한다.
ClientAuthentication 선언시 VaultToken을 사용하고자 하는 경우,
다음 공식 문서를 참고한다. (docs.spring.io/spring-vault/docs/2.2.2.RELEASE/reference/html/#vault.core.template.beans)
'SpringFramework > Spring' 카테고리의 다른 글
gradle is not abstract and does not override abstract method getValue() 오류 (0) | 2021.03.22 |
---|---|
AbstractJsonpResponseBodyAdvice Deprecated 대응 (0) | 2021.03.19 |
ObjectMapper List 변환 (0) | 2021.03.16 |
jQuery DataTable Paging Model Mapping (0) | 2021.03.09 |
Enum 객체 활용 방안 (0) | 2021.03.09 |