Переопределите метод getPassword () в классе oracle .ucp.jdb c .PoolDataSourceFactory. - PullRequest
0 голосов
/ 18 марта 2020

Я хотел переопределить метод getPassword (), который находится в oracle .ucp.jdb c .PoolDataSourceFactory классе, который наследует методы из класса PoolDataSourceImpl (). Я хотел переписать getPassword, так как мне нужно расшифровать пароль перед созданием соединения с БД. Ниже приведен Spring Config XML tracert.

<bean id="dataSource" class="aero.sita.uatp.gwam.dao.utility.EncryptedDataSource" factory-method="getPoolDataSource">
    <property name="URL" value="${jdbc.url}" />
    <property name="user" value="${jdbc.user}" />
    <property name="password" value="${jdbc.password}" />
    <property name="initialPoolSize" value="${jdbc.cp.initialPoolSize}" />
    <property name="maxPoolSize" value="${jdbc.cp.maxPoolSize}" />
    <property name="validateConnectionOnBorrow" value="true" />
    <property name="minPoolSize" value="${jdbc.cp.minPoolSize}" />
    <property name="connectionFactoryClassName" value="${jdbc.cp.connectionFactoryClassName}" />
    <property name="connectionPoolName" value="${jdbc.cp.connectionPoolName}" />
    <property name="fastConnectionFailoverEnabled" value="true" />
    <property name="ONSConfiguration" value="${jdbc.cp.ONSConfiguration}" />
    <!-- When asked, give only valid connections. -->
    <property name="SQLForValidateConnection" value="SELECT 1 from DUAL" />
</bean>

Вот файл класса, который я расширяю через свой пользовательский класс.

publi c абстрактный класс EncryptedDataSource extends PoolDataSourceFactory реализует PoolDataSource {

/**
 * 
 */
private static final long serialVersionUID = 529067561553201697L;
private  final Logger logger = Logger.getLogger(EncryptedDataSource.class);



@Override
public String getPassword() 
{
    logger.info("Entered Password :: ");
    String password = super.getPoolDataSource().getPassword();
    logger.info("Encrypted Password :: "+password);
    return decode(password);
}



/***
 * Decode Password
 */
private String decode(String decode) {
    byte[] decodedBytes = Base64.getDecoder().decode(decode);
    logger.info("Decoded Password :: "+new String(decodedBytes));
    return new String(decodedBytes);
}

}

Проблема, с которой я сталкиваюсь, заключается в том, что при вызове любого метода, использующего БД, значение пароля принимается равным значению, которое я даю в файле свойств. то есть xvadngd-- (Зашифрованный), без вызова моего пользовательского класса EncryptedDataSource.

Можете ли вы помочь мне вызвать мой пользовательский класс, чтобы я расшифровал свой пароль, заданный в файле свойств, и смог получить хорошее соединение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...