Skip to main content

Spring Boot应用集成dotenvx

Dotenvx对Spring Boot的集成如下:

Dotenvx Spring Boot

配置项加密

首先我们需要添加dotenvx Spring Boot Starter依赖,如下:

<dependency>
<groupId>org.mvnsearch</groupId>
<artifactId>dotenvx-spring-boot-starter</artifactId>
<version>0.1.3</version>
</dependency>

注意: dotenvx-spring-boot-starter使用Bouncy Castle的bcprov-jdk18on(JDK 1.8+),如果你的项目使用bcprov-jdk15on,请注意版本冲突问题。

接下来就是在application.properties中添加dotenvx的配置,如下:

dotenv.public.key=02e8d78f0da7fc3b529d503edd933ed8cdc79dbe5fd5d9bd480f1e63a09905f3b3
nick=encrypted:BFpnkHl81r6SFJlzpuCNFe70zOezu3vzkOygmRsAqy0H8zsklDBThtgVl6XDKpZOWq+qHimszEusev2xKXgG2ISdYDbcayNZB2Dd2q5qpo2RqUD0AT9XPrJqPT7DVFBw+hFCZwwqdg==

接下来就是标准的Spring Boot启动方式,请注意.env.keys文件或者DOTENV_PRIVATE_KEY环境变量需要设置为dotenvx的私钥。

如果你使用IntelliJ IDEA,建议安装Spring Debugger插件,最终效果如下:

Dotenvx Spring Boot

Spring Boot还有一个特性就是可以通过SPRING_APPLICATION_JSON环境变量来设置配置项,这样你也可以通过.env文件来设置Spring Boot的配置项,如下:

SPRING_APPLICATION_JSON=‘{"spring.datasource.url":"jdbc:mysql://localhost:3306/mydatabase","spring.datasource.username":"user","spring.datasource.password":"password"}’

字段级加密

Dotenvx除了为Spring Boot提供配置项加密能力外,还可以为Spring Boot REST API提供字段级别的加密功能。 你只要添加一个自定义的Jackson module,在该module中添加Dotenvx支持的Json Serializer和Deserializer即可,如下:

@Configuration
public class DotenvxJacksonConfig {
@Bean
public SimpleModule dotenvxJacksonModule(@Value("${dotenvx.public.key}") String publicKey, @Value("${dotenvx.private.key}") String privateKey) {
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(new DotenvxGlobalJsonSerializer(publicKey));
simpleModule.addDeserializer(String.class, new DotenvxGlobalJsonDeserializer(privateKey));
return simpleModule;
}
}

然后你就可以在Spring Boot的REST Controller中使用private:前缀来标记需要加密的字段,如下:

    @GetMapping("/private/info")
public Map<String, String> privateInfo() {
Map<String, String> map = new HashMap<>();
map.put("email", "private:[email protected]");
return map;
}

在一些安全比较高的场景下,如支付、银行等场景,你可以使用字段级别的加密,来保护敏感信息,如用户的邮箱、手机号等,避免敏感信息泄露。