我如何在运行时为使用Oracle UCP的Tomcate Datasource添加用户名和密码

问题描述 投票:0回答:1

[我试图用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" />

CustomizeOracleUCPDataSource .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();
    }


}

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

java tomcat8 ojdbc ucp
1个回答
0
投票

最后,我在tomcat中实现了密码的加密和解密,该解决方案将解决您所有的密码问题,请转到此链接以获取更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.