java - Springboot解密JNDI tomcat密码

标签 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 Autowiring 到我的 Bean 类以连接到 Oracle 数据库。

我想在 tomcat server.xml 中加密我的密码。如何覆盖 Spring Boot 中的自动配置来解密密码?

最佳答案

你有很多可用的选择。以下仅是其中两个。

如果您有权访问 server.xml(假设这是 Tomcat)文件,则可以指定您自己的 BasicDataSourceFactory 实现- 所以这将是初始化数据源的工厂。在您的自定义实现中,您可以利用解密代码服务来处理加密的密码。

如果您无权访问 server.xml,一种方法是使用 UserCredentialsDataSourceAdapter 代理目标 JNDI 数据源。 .

An adapter for a target JDBC DataSource, applying the specified user credentials to every standard getConnection() call, implicitly invoking getConnection(username, password) on the target. All other methods simply delegate to the corresponding methods of the target DataSource.

所以基本上这可能是你的流程:

1) 加载 JNDI 数据源

2) 将 JNDI 数据源转换到 Tomcat DataSource能够调用getUsername()getPassword()

3) 在 UserCredentialsDataSourceAdapter ,在调用getConnection(username, password)之前解密密码- 所有其他数据源调用都将委托(delegate)给原始数据源,仅 getConnection(username, password)将被代理。

关于java - Springboot解密JNDI tomcat密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54966751/

相关文章:

java - log4j.properties 内容是否适合生产环境

java - FluentWait 使用中使用 lambda 函数与不使用有何区别?

java - MSVC++ 只编译/禁用链接器

java - 非字符串字段的自定义实体查找失败

Java(和 JBoss)JNDI 和 RMI 端口

java - 部署WAR文件时的Tomcat 7.0.52 JNDI错误

java - IPageLayout下添加keyevent切换ViewPart

spring-boot - 禁用分布式跟踪以进行开发

java - Spring Boot Web 服务指标监控

java - Tomcat JNDI 资源名称别名