gpt4 book ai didi

java - 如何使用 Oracle UCP 在运行时为 Tomcat 数据源添加用户名和密码

转载 作者:行者123 更新时间:2023-12-01 19:16:26 54 4
gpt4 key购买 nike

我试图使用 Oracle UCP 在 tomcat 中创建数据源,我的要求不是在 server.xml 中添加密码,我需要在服务器运行时添加密码,我尝试了很多方法但没有成功。

这是我的代码示例

tomcat中的server.xml

<Resource 
name="testds"
connectionPoolName="testds"
auth="Container"
factory="com.test.tomcat.datasorceEncrypt.CustomizeOracleUCPDataSource"
type="oracle.ucp.jdbc.PoolDataSource"
connectionFactoryClassName="com.test.tomcat.datasorceEncrypt.CustomizeOracleUCPDataSource2"
jmxEnabled="true"
initialPoolSize="10"
minPoolSize="10"
maxPoolSize="300"
fastConnectionFailoverEnabled="true"
url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=localhost)(PORT=3203))(CONNECT_DATA=
(SERVICE_NAME=employee)))"
sqlForValidateConnection="select 1 from DUAL" />

自定义OracleUCPDataSource .java

package com.test.tomcat.datasorceEncrypt;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import oracle.ucp.jdbc.PoolDataSourceImpl;

public class CustomizeOracleUCPDataSource extends PoolDataSourceImpl {

/* public CustomizeOracleUCPDataSource() {
Properties dbProperties = null;

try {

this.setPassword("pass");
this.setUser("user");
System.out.println(this.getUser() + "-------" + this.getPassword());
} catch (Exception e) {
}
}*/

@Override
public Connection getConnection() throws SQLException {


try {
this.setPassword("pass");
this.setUser("user");
System.out.println(this.getUser() + "-------" + this.getPassword());
} catch (Exception e) {
}
return super.getConnection(username, password);
}

@Override
public Connection getConnection(String username, String password) throws SQLException {
// TODO Auto-generated method stub
return super.getConnection(username, password);
}



@Override
protected void createPoolWithDefaultProperties() throws SQLException {

try {
this.setPassword("pass");
this.setUser("user");
System.out.println(this.getUser() + "-------" + this.getPassword());
} catch (Exception e) {
}
super.createPoolWithDefaultProperties();
}


}

自定义OracleUCPDataSource2.java

package com.test.tomcat.datasorceEncrypt;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import oracle.jdbc.pool.OracleDataSource;

public class CustomizeOracleUCPDataSource2 extends OracleDataSource {

public CustomizeOracleUCPDataSource2() throws SQLException {
super();
this.setPassword("pass");
this.setUser("user");
}



@Override
public Connection getConnection() throws SQLException {
this.setPassword("pass");
this.setUser("user");
return super.getConnection(username, password);
}

@Override
public Connection getConnection(String username, String password) throws SQLException {
return super.getConnection(username, password);
}



}

没有任何解决办法,我的用户名和密码已打印在控制台中,但无法设置到数据源。

创建数据源时,我收到以下日志信息。

19-Dec-2019 19:34:35.763 FINE [http-nio-8080-exec-1] oracle.ucp.logging.ClioSupport._log oracle.ucp.jdbc.PoolDataSourceImpl:createPoolWithDefaultProperties:oracle.ucp.jdbc.PoolDataSourceImpl@6b938ce5:Connection pool instance is 
19-Dec-2019 19:34:35.803 FINE [http-nio-8080-exec-1] oracle.ucp.logging.ClioSupport._log oracle.ucp.jdbc.PoolDataSourceImpl:createPool:oracle.ucp.jdbc.PoolDataSourceImpl@6b938ce5:Connection pool instance is created

通过详细信息,我无法创建数据源,但出现以下错误:

 Error occurred while establishing connection to the Test database

任何帮助都将不胜感激。

我使用的是Ojdbc8.jar,ucp.jar

最佳答案

最终我在tomcat中实现了密码的加密和解密,这个解决方案将适用于您所有的密码问题,请访问此链接了解更多详细信息。

Tomcat support for password encryption and deryption

关于java - 如何使用 Oracle UCP 在运行时为 Tomcat 数据源添加用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411899/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com