这是我的context.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"/>
出于安全原因,我不想将此用户名和密码添加到此文件中。我有以下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)
如果我将用户名和密码放回context.xml中,它就像魅力一样。我怎么把它放在文件外面。我只想将它放在我的Java类中,因为密码将被加密,而不是在xml中,因为从xml解密密码并不简单,我不想进入它。有人可以建议我如何实现这一目标?请
答案 0 :(得分:1)
Tomcat 7 context.xml支持占位符。 dochere
Is it possible to use placeholder in context.xml
在我的项目中,我在一个监听器中初始化我的DataSource,它允许程序从outfile或类中读取config选项。