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

SpringBoot集成Couchbase字段级加密(FLE)时遇cryptoManager为空异常的问题求助

SpringBoot集成Couchbase字段级加密(FLE)时遇cryptoManager为空异常的问题求助

大家好,我尝试在SpringBoot Java应用中集成Couchbase的字段级加密(FLE),已经按照官方文档完成了配置,但始终无法正常运行。

每当我在实体字段上使用@Encrypted注解时,就会抛出如下异常:

Request processing failed: java.lang.IllegalArgumentException: cryptoManager needed to encrypt/decrypt but it is null. Override needed for cryptoManager() method of org.springframework.data.couchbase.core.convert.AbstractCouchbaseConverter

以下是我的相关代码:

加密配置类

@Configuration
@EnableCouchbaseRepositories("my.repo.under.here")
public class EncryptionConfig extends AbstractCouchbaseConfiguration {

        // 常规配置
        @Override public String getConnectionString() { return "localhost"; }
        @Override public String getUserName() { return "Administrator"; }
        @Override public String getPassword() { return "admin123"; }
        @Override public String getBucketName() { return "my_bucket"; }

        /* 提供cryptoManager */
        @Override
        protected CryptoManager cryptoManager() {
            try {
                // 加载Java密钥库
                KeyStore keyStore = KeyStore.getInstance("JCEKS");
                FileInputStream keyStoreStream = new FileInputStream("/Users/asd1983/my-keystore.jceks");
                keyStore.load(keyStoreStream, "test123".toCharArray());

                // 用密钥库初始化Keyring
                Keyring keyring = new KeyStoreKeyring(keyStore, alias -> "keypassword");

                // AES-256搭配HMAC SHA-512认证,需要64字节密钥
                AeadAes256CbcHmacSha512Provider provider = AeadAes256CbcHmacSha512Provider.builder().keyring(keyring).build();

                CryptoManager cryptoManager = DefaultCryptoManager.builder().decrypter(provider.decrypter())
                        .defaultEncrypter(provider.encrypterForKey("my-key")).build();

                return cryptoManager;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
    }
}

实体类

@Document
public class Data {
  @Id
  private String id;
  @Encrypted
  private String password;
}

Repository接口

package my.repo.under.here;

@Repository
public interface DataRepository extends CouchbaseRepository<Data, String> { }

有没有大佬能帮我排查下问题?明明已经重写了cryptoManager()方法,为什么还是提示这个对象为空呢?

备注:内容来源于stack exchange,提问作者Colin Schofield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:08:07