我在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应用程序,并且已经在application.properties中配置了JNDI名称,如下所示
spring.datasource.jndi-name=java:comp/env/jdbc/dbsource
我直接将JDBCTemplate自动布线到我的Bean类以连接到Oracle数据库。
我想在tomcat server.xml中加密我的密码。如何在Spring Boot中覆盖自动配置以解密密码?
答案 0 :(得分:1)
您有很多可用的选项。下面只是两个。
如果您有权访问server.xml
(假设这是Tomcat)文件,则可以指定自己的BasicDataSourceFactory
实现-这样它将是初始化数据源的工厂。在您的自定义实现中,您可以利用解密代码服务来处理加密的密码。
如果您无权访问server.xml
,则一种方法是使用UserCredentialsDataSourceAdapter
代理目标JNDI数据源。
目标JDBC数据源的适配器,应用指定的用户 每个标准getConnection()调用的凭据 在目标上调用getConnection(用户名,密码)。所有其他 方法只是委托给目标的相应方法 数据源。
所以基本上这可能是您的工作流程:
1)加载JNDI数据源
2)将JNDI数据源转换为Tomcat DataSource,以便能够调用getUsername()
和getPassword()
3)在UserCredentialsDataSourceAdapter
中,在调用getConnection(username, password)
之前解密密码-所有其他数据源调用将被委派给原始数据源,只有getConnection(username, password)
被代理。