在Tomcat中,为了避免在server.xml文件中以明文形式存储密码,可以使用外部密码存储机制。这里我们将介绍一种基于Java KeyStore的方法。
keystore.jks
。keytool -genkey -alias tomcat -storetype JKS -keyalg RSA -keysize 2048 -keystore keystore.jks
keytool -genseckey -alias dbpassword -storetype JKS -keyalg AES -keysize 128 -keystore keystore.jks
conf
文件夹中。server.xml
文件中,使用CredentialHandler
元素引用密码。<CredentialHandler className="org.apache.tomcat.util.buf.DigesterCredentialHandler"
algorithm="AES"
keyStoreFile="conf/keystore.jks"
keyStoreType="JKS"
keyAlias="dbpassword"
keyPass="your_key_pass" />
context.xml
文件中,使用Credential
元素引用密码。<Credential
className="org.apache.tomcat.util.buf.DigesterCredentialHandler"
algorithm="AES"
keyStoreFile="conf/keystore.jks"
keyStoreType="JKS"
keyAlias="dbpassword"
keyPass="your_key_pass" />
server.xml
文件中,使用Credential
元素引用密码。 auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/yourDatabase"
username="yourUsername"
password="yourPassword"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
initialSize="10"
maxActive="100"
maxIdle="20"
minIdle="15"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
validationQuery="SELECT 1"
testOnBorrow="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="60000"
jmxEnabled="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" />
通过以上步骤,您可以在Tomcat中为数据源定义一个资源,并在不明文存储密码的情况下使用它。
推荐的腾讯云相关产品:
推荐的产品介绍链接地址:
DBTalk
Elastic 中国开发者大会
Techo Day
Elastic 中国开发者大会
云+社区技术沙龙[第22期]
云+未来峰会
云+社区技术沙龙[第7期]
云+社区技术沙龙[第11期]
云+社区技术沙龙第33期
领取专属 10元无门槛券
手把手带您无忧上云