使用 apache commons 基本数据源安全连接到 oracle 数据库

Secure connection to oracle database using apache commons Basic Datasource

作为保护所有连接的一部分,我们在 Oracle 数据库中启用了 ASO,我能够使用 oracle.jdbc.pool.OracleDataSource 从我的 java 建立安全连接。但是我们有使用 apache 基本数据源的项目。我尝试了以下但数据仍然没有被加密。

    BasicDataSource ods = new BasicDataSource();
    ods.setUrl(URL);
    ods.setUsername(user);
    ods.setPassword(password);
    ods.setConnectionProperties("AutoCommit=false;");
    ods.setConnectionProperties("OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL=REQUIRED;");
    ods.setConnectionProperties("OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES=(AES256);");
    ods.setConnectionProperties("OracleConnection.CONNECTION_PROPERTY_THIN_NET_CRYPTO_SEED=(sfdsvcfdssegdsvg);");

如果我在连接属性中遗漏了什么,请告诉我。谢谢

方法BasicDataSource#setConnectionProperties(String)覆盖之前添加到数据源的所有属性

您需要使用方法 BasicDataSource#addConnectionProperty(String, String) 添加单个 属性:

BasicDataSource ods = new BasicDataSource();
ods.addConnectionProperty("OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL", "REQUIRED")

或者用相关数据构建 Properties 实例,然后才将其添加到 DataSource:

Properties prop = new Properties();
prop.setProperty("OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL", "REQUIRED");
prop.setProperty("OracleConnection.CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES", "(AES256)")
...
BasicDataSource ods = new BasicDataSource();
ods.setConnectionProperties(prop);