Springboot расшифровывает пароль JNDI tomcat - PullRequest
0 голосов
/ 03 марта 2019

У меня есть следующая конфигурация в Tomcat для JNDI.Мой пароль зашифрован в файле server.xml

<Resource auth="Container" 
          driverClassName="oracle.jdbc.driver.OracleDriver" 
          global="jdbc/dbsource" 
          maxIdle="30" 
          maxTotal="1000" 
          maxWaitMillis="100000" 
          name="jdbc/dbsource" 
          password=<<unencrypted password>> 
          type="javax.sql.DataSource" 
          url=<<dburl>> 
          username="user" />

Я запускаю приложение Springboot и настроил имя JNDI в application.properties следующим образом

spring.datasource.jndi-name=java:comp/env/jdbc/dbsource

Япрямое автоматическое подключение JDBCTemplate к моему классу Bean для подключения к базе данных Oracle.

Я хочу зашифровать свой пароль в tomcat server.xml.Как переопределить автоматическую настройку при весенней загрузке для расшифровки пароля?

1 Ответ

0 голосов
/ 03 марта 2019

У вас есть куча доступных вариантов.Ниже приведены только два.

Если у вас есть доступ к файлу server.xml (предполагается, что это Tomcat), вы можете указать собственную реализацию BasicDataSourceFactory - так что это будетфабрика, которая будет инициализировать источник данных.В вашей пользовательской реализации вы можете использовать службы кода дешифрования для работы с зашифрованным паролем.

Если у вас нет доступа к server.xml, одним из способов будет проксирование целевого источника данных JNDI с помощью UserCredentialsDataSourceAdapter.

Адаптер для целевого источника данных JDBC, применяющий указанные учетные данные пользователя к каждому стандартному вызову getConnection (), неявно вызывающий getConnection (имя пользователя, пароль) для цели.Все остальные методы просто делегируются соответствующим методам целевого источника данных.

Таким образом, в основном это может быть ваш поток:

1) Загрузить источник данных JNDI

2) Приведите JNDI-источник данных к Tomcat DataSource , чтобы иметь возможность вызывать getUsername() и getPassword()

3) In UserCredentialsDataSourceAdapter, расшифруйте пароль перед вызовом getConnection(username, password) - все остальные вызовы источника данных будут делегированы исходному источнику данных, только прокси будет getConnection(username, password).

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