使用Oracle Wallet身份验证从Spring-jdbc连接到Oracle DB

时间:2014-07-23 11:21:14

标签: java spring oracle authentication jdbc

我使用Spring-jdbc和org.apache.commons.dbcp.BasicDataSource使用用户名和密码进行连接。我想使用BasicDataSource,因为我只有一个连接。

我有这段代码:

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    id="dataSource">
    <property name="driverClassName" value="${database.driverClassName}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.username}" />
    <property name="password" value="${database.password}" /> 
</bean>

现在我必须使用基于Oracle Wallet的身份验证,在没有Spring的简单应用程序测试中我没有问题,但我无法将此新身份验证与Spring集成。有谁知道我怎么做?

1 个答案:

答案 0 :(得分:4)

你提到&#34;简单的应用程序测试&#34;所以我假设您需要配置单元测试。在单元测试配置类(例如class TestSpringWebConfig extends SpringWebConfig)中,这将使用钱包获取Oracle数据源(奖励:以下使用代理数据库帐户):

System.setProperty("oracle.net.tns_admin", "path/to/your/tnsnames");

OracleDataSource ds = new OracleDataSource();

Properties props = new Properties();
props.put("oracle.net.wallet_location", "(source=(method=file)(method_data=(directory=path/to/your/wallet)))");

/*
  Use the following only if you have a proxy user database account instead of a normal DB account
  A test user's username could go here though
*/
props.put(OracleConnection.CONNECTION_PROPERTY_PROXY_CLIENT_NAME, "proxy-user-name"); 

ds.setConnectionProperties( props );
ds.setURL("jdbc:oracle:thin:/@dbAlias"); //dbAlias should match what's in your tnsnames

return ds;

这也假设您在JDK中有以下内容:

在JAVA_HOME / jre / lib / security / java.security中,将以下内容添加到&#34;提供商列表&#34;:

security.provider.11=oracle.security.pki.OraclePKIProvider

将以下jar从Oracle添加到JAVA_HOME / jre / lib / ext:

  • osdt_cert.jar
  • osdt_core.jar
  • oraclepki.jar

当然,以上所有假设ojdbc7 jar已经在你的应用程序的类路径中了。