You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成MongoDB如何配置客户端字段级加密字段自动解密

MongoDB客户端字段级解密接入方案

1. 引入加密依赖

在pom.xml中添加MongoDB加密模块依赖,版本需与项目引入的MongoDB Java驱动版本匹配:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-crypt</artifactId>
    <version>1.7.1</version>
</dependency>

2. 配置自动解密规则

新增MongoDB配置类,自定义客户端配置开启自动解密能力,指定密钥库位置和加密字段映射规则:

import com.mongodb.AutoEncryptionSettings;
import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class MongoDecryptionConfig {

    @Bean
    public MongoClientSettingsBuilderCustomizer decryptionCustomizer() {
        return builder -> {
            // 替换为实际密钥库对应的 数据库名.key_vault
            String keyVaultNamespace = "your_db.key_vault";
            // 替换为实际业务集合对应的 数据库名.user_data
            String collectionNs = "your_db.user_data";

            // 配置加密字段规则,指定加密字段解密后的类型
            Map<String, Object> fieldProps = new HashMap<>();
            fieldProps.put("first_name", Map.of("encrypt", Map.of("bsonType", "string")));
            fieldProps.put("last_name", Map.of("encrypt", Map.of("bsonType", "string")));
            Map<String, Object> schema = Map.of("bsonType", "object", "properties", fieldProps);

            AutoEncryptionSettings encryptionSettings = AutoEncryptionSettings.builder()
                    .keyVaultNamespace(keyVaultNamespace)
                    // 仅开启解密,关闭自动加密,不需要加密写入可保留该配置
                    .bypassAutoEncryption(true)
                    .schemaMap(Map.of(collectionNs, schema))
                    // 若使用KMS管理密钥,补充下方kmsProviders配置,示例为本地密钥配置
                    // .kmsProviders(Map.of("local", Map.of("key", 你的本地主密钥字节数组)))
                    .build();

            builder.autoEncryptionSettings(encryptionSettings);
        };
    }
}

3. 可选:实体类添加加密注解

也可以选择在实体类加密字段上添加@Encrypted注解替代上面的schema配置,效果一致:

@Field("first_name")
@Encrypted
private String firstName;

@Field("last_name")
@Encrypted
private String lastName;

验证效果

重启项目后执行原有查询逻辑,客户端会自动拉取key_vault中的密钥解密二进制字段,自动映射为String类型,不会再抛出类型转换异常。

注意事项

  • 确保应用使用的MongoDB账号拥有key_vault集合的读权限
  • 若使用云厂商KMS管理密钥,需将对应KMS的认证信息补充到kmsProviders配置中

内容的提问来源于stack exchange,提问作者Alon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:27:01