【问题标题】:Springboot decrypt JNDI tomcat passwordSpringboot解密JNDI tomcat密码
【发布时间】:2019-03-03 08:01:20
【问题描述】:

我在 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 db。

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

【问题讨论】:

    标签: java spring-boot jndi tomcat9


    【解决方案1】:

    您有很多可用的选项。以下只是两个。

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

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

    目标 JDBC 数据源的适配器,应用指定的用户 每个标准 getConnection() 调用的凭据,隐式 在目标上调用 getConnection(username, password)。所有其他 方法只是委托给目标的相应方法 数据源。

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

    1) 加载 JNDI 数据源

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

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

    【讨论】:

    • 非常感谢。我尝试了第一种方法,效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多