首页 > 解决方案 > 将 grails 与 hashcorp vault 集成

问题描述

我正在尝试将 hashcorp vault 集成到 grails 应用程序中。我无法在互联网上找到教程或一些帮助。甚至 grails 文档也没有对此主题发表任何评论。

有谁知道我怎么能做到这一点?

我正在使用 grails 2.5.6

编辑

通过集成,我的意思是让 grails 从 hashcorp vault 中读取属性,而不是我在 Config.groovy 或 DataSource.groovy 中定义的属性或类路径中的其他属性。我定义了一个自定义占位符,它能够到达我的 hashcorp 保险库,但 grails 无法识别我带来的属性。

MyPlaceholderConfigurer.java

public class MyPlaceholderConfigurer extends GrailsPlaceholderConfigurer { 
    final static Logger logger = Logger.getLogger(MyPlaceholderConfigurer.class); 

    public MyPlaceholderConfigurer(GrailsApplication application) { 
        super(application); 
        logger.info("XXXXXXXXX: Started MyPlaceholderConfigurer"); 
    } 

    @Override 
    protected void loadProperties(Properties props) throws IOException { 
        logger.info("XXXXXXXXX: loadProperties()"); 
        super.loadProperties(props); 
        Map<String, Object> vault = HashicorpVault.getSecrets(); 
        props.putAll(vault); 
    } 
} 

资源.groovy

propertySourcesPlaceholderConfigurer(MyPlaceholderConfigurer, application) { 
    environment = getUnrefreshedApplicationContext().getEnvironment() 
}

配置文件

grails.config.locations = ["classpath:Principal.properties", "classpath:MyDatabase.groovy"] 

标签: grailshashicorp-vault

解决方案


groovy(或 grails-plugin)没有客户端库。

由于 groovy 与 java 配合得很好,您可以只使用该java-client库 ( https://www.vaultproject.io/api/libraries.html ),您最可能想要的是 https://github.com/BetterCloud/vault-java-驱动程序,因为驱动程序的 Spring 版本可能与 grails 的 Spring 版本冲突。此外,非 spring 版本针对 java 7+,因此您最终不会解决java 8 new features与 grails 2.5.x 捆绑的旧 groovy 版本不支持的问题

修改您的BuildConfig.groovy以获取库:

dependencies {

    ...

    compile 'com.bettercloud:vault-java-driver:3.1.0'

    ...
}

并按照 github 页面上的说明进行操作。


推荐阅读