我有一个 Spring 4.1.1 Web 应用程序。当前,数据源密码以明文形式存储在属性文件中。配置是:
<bean id="mainDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
scope="singleton"
destroy-method="close">
<property name="driverClass"><value>${jdbc.driver}</value></property>
<property name="jdbcUrl"><value>${jdbc.url}</value></property>
<property name="user"><value>${jdbc.username}</value></property>
<property name="password"><value>${jdbc.password}</value></property>
.
.
.
</bean>
我的客户不希望将密码存储在属性文件中,或者更一般地说,存储在服务器中。
理想的做法是让 Spring 显示一个安全网页以输入数据库密码。
最大的问题是我需要访问数据库来初始化上下文以及应用程序运行所需的几乎所有东西。所以问题是:
是否可以让 Spring 在上下文初始化之前显示一个网页,以便用户可以输入数据源密码?可能是通过过滤器之类的?
请注意,在属性文件中加密密码或在 Tomcat 启动时将其作为参数传递是行不通的,因为就安全性而言,它与在属性文件中没有太大区别.
最佳答案
我最终做的是将数据库密码设置到一个环境变量中,在spring配置文件中使用该变量,然后在启动后删除该变量。这很有效,而且似乎让客户很高兴。
要读取 spring_db.xml 中的环境变量,请使用此表达式,如果您有 Spring 3.0 及更高版本:
<property name="password"><value>#{systemEnvironment['variable_name']}</value></property>
关于java - Spring:在上下文初始化之前显示静态页面以输入数据源密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776355/