jboss中配置连接池时默认数据库用密码是用明文方式存储,这给数据库的安全带来了一定的风险。
下面介绍如何在jbosscp06下对数据库密码加密。
数据库用户:MYORACLE 密码:TEST
1.制作加密工具
a).将以下四个jar拷贝到一个指定的目录中,如D:/pass
D:/jboss-eap-4.3/jboss-as/lib/jboss-common.jar,jboss-jmx.jar
D:/jboss-eap-4.3/jboss-as/server/production/lib/jboss-jca.jar,jbosssx.jar
b)编写encrypt.bat内容为
org.jboss.resource.security.SecureIdentityLoginModule 是我们加密的程序
TEST 为要加密的密码
3fb2b2b29f74131a 为加密后输出的结果
2.jboss_home/production/conf/jboss-log4j.xml添加
<application-policy name="testDataSource"> --testDataSource 是连接池的名称
<authentication>
<login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
<module-option name=“username”>MYORACLE</module-option> -- 用户名
<module-option name="password">3fb2b2b29f74131a</module-option> --加密后的密码
<module-option name="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=testDataSource
</module-option>
</login-module>
</authentication>
</application-policy>
3.jboss_home/production/deploy/oracle-ds.xml 配置
<local-tx-datasource>
<jndi-name>testDataSource</jndi-name>
<connection-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</connection-url>
<use-java-context>false</use-java-context>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<security-domain>testDataSource</security-domain> (不需要写数据库用户名密码)
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
<new-connection-sql>ALTER session set NLS_DATE_FORMAT='YYYY-MM-DD'</new-connection-sql>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</local-tx-datasource>
4.重启jboss