2014-07-23 211 views
2

我使用Spring-jdbc与org.apache.commons.dbcp.BasicDataSource一起使用连接的用户名和密码。我想使用BasicDataSource,因为我只有一个连接。使用Oracle Wallet验证从Spring-jdbc连接到Oracle数据库

我有这个代码:

<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> 

现在,我必须使用基于甲骨文钱包认证,我没有在一个简单的应用程序的测试问题,而春天,但我不能融入这个新的身份验证弹簧。有谁知道我该怎么做?

+0

你能更具体吗?您是否希望将用户的密码存储在钱包中?或者你是否希望在钱包中存储证书,然后使用SSL连接?如果你想要做的是使用SSL,那么你是否也想通过客户端证书来验证数据库用户? –

回答

2

你提到“简单的应用程序测试”,所以我假设你需要配置你的单元测试。在一个单元测试配置类(例如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,添加以下的 “供应商名录”:

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

并加入甲骨文以下罐子JAVA_HOME/JRE/lib/ext目录:

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

和当然,上述所有假设ojdbc7罐子是在应用程序的类路径了。