java将数据源密码置于上下文之外。xml
这是我的背景。xml-
<Context docBase=“myDB” path="/myDB" reloadable="true">
<Resource name="jdbc/OracleDS"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@test.asia-pacific.com:1546:myTest”
accessToUnderlyingConnectionAllowed="true"
maxActive="10"
maxIdle="5"
maxwait="-1"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"/>
出于安全原因,我不想将我的DB用户名和密码添加到此文件。我有下面的Java代码-
Connection getConnection() {
Connection con = null;
DataSource ds = null;
try {
if (getJNDIName() != null) {
Hashtable env = new Hashtable();
env.put(Context.SECURITY_PRINCIPAL, "username");
env.put(javax.naming.Context.SECURITY_CREDENTIALS, "password");
Context initCtx = new InitialContext(env);
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup(getJNDIName());
if (ds != null) {
con = ds.getConnection();
}
if (ds == null || con == null) {
throw new RuntimeException(
"DataSource and/or Connection object is null.");
}
return con;
} else if (cd_.con_ != null) {
return cd_.con_;
} else {
return null;
}
} catch (Exception e) {
System.out.println(e.printStackTrace());
}
return null;
}
启动应用程序时,我在日志文件中看到以下错误-
Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382)
at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:600)
at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:445)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:380)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:760)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
如果我把用户名和密码放回上下文中。xml,它就像一个魅力。我如何把它放在文件之外。我只想把它放在我的Java类中,因为密码将被加密,而不是用xml,因为从xml解密密码并不简单,我不想进入它。有人能建议我如何做到这一点吗?请
# 1 楼答案
Tomcat 7上下文。xml支持占位符。 dochere
Is it possible to use placeholder in context.xml
在我的项目中,我在一个侦听器中初始化我的数据源,该侦听器允许程序从输出文件或类中读取配置选项