Я хотел переопределить метод 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.
Можете ли вы помочь мне вызвать мой пользовательский класс, чтобы я расшифровал свой пароль, заданный в файле свойств, и смог получить хорошее соединение