Springboot解密JNDI tomcat密码

时间:2019-03-03 08:01:21

标签: java spring-boot jndi tomcat9

我在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中覆盖自动配置以解密密码?

1 个答案:

答案 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)被代理。