Spring Boot应用集成dotenvx
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插件,最终效果如下:
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:nick@example.com");
return map;
}
在一些安全比较高的场景下,如支付、银行等场景,你可以使用字段级别的加密,来保护敏感信息,如用户的邮箱、手机号等,避免敏感信息泄露。