有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案