Repository: commons-dbcp Updated Branches: refs/heads/master 7b893aed7 -> 5bac43f7b
[DBCP-519] Add some toString() methods for debugging (never printing passwords) Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/5bac43f7 Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/5bac43f7 Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/5bac43f7 Branch: refs/heads/master Commit: 5bac43f7b775c9c876af614e745f80ccb495f01f Parents: 7b893ae Author: Gary Gregory <garydgreg...@gmail.com> Authored: Thu Aug 16 12:59:41 2018 -0600 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Thu Aug 16 12:59:41 2018 -0600 ---------------------------------------------------------------------- src/changes/changes.xml | 3 + .../dbcp2/cpdsadapter/DriverAdapterCPDS.java | 40 +++++++++++ .../dbcp2/cpdsadapter/PooledConnectionImpl.java | 23 +++++++ .../datasources/CPDSConnectionFactory.java | 26 +++++++ .../datasources/InstanceKeyDataSource.java | 72 ++++++++++++++++++++ .../datasources/PerUserPoolDataSource.java | 41 +++++++++++ .../dbcp2/datasources/SharedPoolDataSource.java | 7 ++ .../commons/dbcp2/datasources/UserPassKey.java | 7 +- 8 files changed, 216 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 27717b1..8d69d58 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -76,6 +76,9 @@ The <action> type attribute can be add,update,fix,remove. <action dev="ggregory" type="fix" issue="DBCP-518" due-to="Gary Gregory"> Allow DBCP to work with old Java 6/JDBC drivers without throwing AbstractMethodError. </action> + <action dev="ggregory" type="add" issue="DBCP-519" due-to="Gary Gregory"> + Add some toString() methods for debugging (never printing passwords.) + </action> </release> <release version="2.5.0" date="2018-07-15" description="This is a minor release, including bug fixes and enhancements."> <action dev="ggregory" type="update" issue="DBCP-505" due-to="Gary Gregory"> http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java index 0844c9b..db97efe 100644 --- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java +++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java @@ -730,4 +730,44 @@ public class DriverAdapterCPDS implements ConnectionPoolDataSource, Referenceabl } } } + + /** + * Does not print the userPassword field nor the password in the connectionProperties. + * + * @since 2.6.0 + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(super.toString()); + builder.append("[description="); + builder.append(description); + builder.append(", url="); + builder.append(url); + builder.append(", userName="); + builder.append(userName); + builder.append(", driver="); + builder.append(driver); + builder.append(", loginTimeout="); + builder.append(loginTimeout); + builder.append(", poolPreparedStatements="); + builder.append(poolPreparedStatements); + builder.append(", maxIdle="); + builder.append(maxIdle); + builder.append(", timeBetweenEvictionRunsMillis="); + builder.append(timeBetweenEvictionRunsMillis); + builder.append(", numTestsPerEvictionRun="); + builder.append(numTestsPerEvictionRun); + builder.append(", minEvictableIdleTimeMillis="); + builder.append(minEvictableIdleTimeMillis); + builder.append(", maxPreparedStatements="); + builder.append(maxPreparedStatements); + builder.append(", getConnectionCalled="); + builder.append(getConnectionCalled); + builder.append(", connectionProperties="); + builder.append(((Properties) connectionProperties.clone()).remove("password")); + builder.append(", accessToUnderlyingConnectionAllowed="); + builder.append(accessToUnderlyingConnectionAllowed); + builder.append("]"); + return builder.toString(); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java index 715c0de..604ad71 100644 --- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java +++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java @@ -647,4 +647,27 @@ class PooledConnectionImpl public boolean validateObject(final PStmtKey key, final PooledObject<DelegatingPreparedStatement> pooledObject) { return true; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(super.toString()); + builder.append("[connection="); + builder.append(connection); + builder.append(", delegatingConnection="); + builder.append(delegatingConnection); + builder.append(", logicalConnection="); + builder.append(logicalConnection); + builder.append(", eventListeners="); + builder.append(eventListeners); + builder.append(", statementEventListeners="); + builder.append(statementEventListeners); + builder.append(", closed="); + builder.append(closed); + builder.append(", pStmtPool="); + builder.append(pStmtPool); + builder.append(", accessToUnderlyingConnectionAllowed="); + builder.append(accessToUnderlyingConnectionAllowed); + builder.append("]"); + return builder.toString(); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java index 20f0c1f..ef6e5f7 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java @@ -20,6 +20,7 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.Arrays; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -396,4 +397,29 @@ class CPDSConnectionFactory } } } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(super.toString()); + builder.append("[cpds="); + builder.append(cpds); + builder.append(", validationQuery="); + builder.append(validationQuery); + builder.append(", validationQueryTimeoutSeconds="); + builder.append(validationQueryTimeoutSeconds); + builder.append(", rollbackAfterValidation="); + builder.append(rollbackAfterValidation); + builder.append(", pool="); + builder.append(pool); + builder.append(", userName="); + builder.append(userName); + builder.append(", maxConnLifetimeMillis="); + builder.append(maxConnLifetimeMillis); + builder.append(", validatingSet="); + builder.append(validatingSet); + builder.append(", pcMap="); + builder.append(pcMap); + builder.append("]"); + return builder.toString(); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java b/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java index b72a03c..2145995 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/InstanceKeyDataSource.java @@ -1053,4 +1053,76 @@ public abstract class InstanceKeyDataSource implements DataSource, Referenceable } return cpds; } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(super.toString()); + builder.append("["); + toStringFields(builder); + builder.append("]"); + return builder.toString(); + } + + protected void toStringFields(StringBuilder builder) { + builder.append("getConnectionCalled="); + builder.append(getConnectionCalled); + builder.append(", dataSource="); + builder.append(dataSource); + builder.append(", dataSourceName="); + builder.append(dataSourceName); + builder.append(", description="); + builder.append(description); + builder.append(", jndiEnvironment="); + builder.append(jndiEnvironment); + builder.append(", loginTimeout="); + builder.append(loginTimeout); + builder.append(", logWriter="); + builder.append(logWriter); + builder.append(", instanceKey="); + builder.append(instanceKey); + builder.append(", defaultBlockWhenExhausted="); + builder.append(defaultBlockWhenExhausted); + builder.append(", defaultEvictionPolicyClassName="); + builder.append(defaultEvictionPolicyClassName); + builder.append(", defaultLifo="); + builder.append(defaultLifo); + builder.append(", defaultMaxIdle="); + builder.append(defaultMaxIdle); + builder.append(", defaultMaxTotal="); + builder.append(defaultMaxTotal); + builder.append(", defaultMaxWaitMillis="); + builder.append(defaultMaxWaitMillis); + builder.append(", defaultMinEvictableIdleTimeMillis="); + builder.append(defaultMinEvictableIdleTimeMillis); + builder.append(", defaultMinIdle="); + builder.append(defaultMinIdle); + builder.append(", defaultNumTestsPerEvictionRun="); + builder.append(defaultNumTestsPerEvictionRun); + builder.append(", defaultSoftMinEvictableIdleTimeMillis="); + builder.append(defaultSoftMinEvictableIdleTimeMillis); + builder.append(", defaultTestOnCreate="); + builder.append(defaultTestOnCreate); + builder.append(", defaultTestOnBorrow="); + builder.append(defaultTestOnBorrow); + builder.append(", defaultTestOnReturn="); + builder.append(defaultTestOnReturn); + builder.append(", defaultTestWhileIdle="); + builder.append(defaultTestWhileIdle); + builder.append(", defaultTimeBetweenEvictionRunsMillis="); + builder.append(defaultTimeBetweenEvictionRunsMillis); + builder.append(", validationQuery="); + builder.append(validationQuery); + builder.append(", validationQueryTimeoutSeconds="); + builder.append(validationQueryTimeoutSeconds); + builder.append(", rollbackAfterValidation="); + builder.append(rollbackAfterValidation); + builder.append(", maxConnLifetimeMillis="); + builder.append(maxConnLifetimeMillis); + builder.append(", defaultAutoCommit="); + builder.append(defaultAutoCommit); + builder.append(", defaultTransactionIsolation="); + builder.append(defaultTransactionIsolation); + builder.append(", defaultReadOnly="); + builder.append(defaultReadOnly); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java b/src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java index 1087b37..289617b 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/PerUserPoolDataSource.java @@ -1173,4 +1173,45 @@ public class PerUserPoolDataSource extends InstanceKeyDataSource { con.setReadOnly(defaultReadOnly.booleanValue()); } } + + @Override + protected void toStringFields(StringBuilder builder) { + super.toStringFields(builder); + builder.append(", perUserBlockWhenExhausted="); + builder.append(perUserBlockWhenExhausted); + builder.append(", perUserEvictionPolicyClassName="); + builder.append(perUserEvictionPolicyClassName); + builder.append(", perUserLifo="); + builder.append(perUserLifo); + builder.append(", perUserMaxIdle="); + builder.append(perUserMaxIdle); + builder.append(", perUserMaxTotal="); + builder.append(perUserMaxTotal); + builder.append(", perUserMaxWaitMillis="); + builder.append(perUserMaxWaitMillis); + builder.append(", perUserMinEvictableIdleTimeMillis="); + builder.append(perUserMinEvictableIdleTimeMillis); + builder.append(", perUserMinIdle="); + builder.append(perUserMinIdle); + builder.append(", perUserNumTestsPerEvictionRun="); + builder.append(perUserNumTestsPerEvictionRun); + builder.append(", perUserSoftMinEvictableIdleTimeMillis="); + builder.append(perUserSoftMinEvictableIdleTimeMillis); + builder.append(", perUserTestOnCreate="); + builder.append(perUserTestOnCreate); + builder.append(", perUserTestOnBorrow="); + builder.append(perUserTestOnBorrow); + builder.append(", perUserTestOnReturn="); + builder.append(perUserTestOnReturn); + builder.append(", perUserTestWhileIdle="); + builder.append(perUserTestWhileIdle); + builder.append(", perUserTimeBetweenEvictionRunsMillis="); + builder.append(perUserTimeBetweenEvictionRunsMillis); + builder.append(", perUserDefaultAutoCommit="); + builder.append(perUserDefaultAutoCommit); + builder.append(", perUserDefaultTransactionIsolation="); + builder.append(perUserDefaultTransactionIsolation); + builder.append(", perUserDefaultReadOnly="); + builder.append(perUserDefaultReadOnly); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/datasources/SharedPoolDataSource.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/SharedPoolDataSource.java b/src/main/java/org/apache/commons/dbcp2/datasources/SharedPoolDataSource.java index 485b43b..76c2617 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/SharedPoolDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/SharedPoolDataSource.java @@ -235,4 +235,11 @@ public class SharedPoolDataSource extends InstanceKeyDataSource { throw new IOException("NamingException: " + e); } } + + @Override + protected void toStringFields(StringBuilder builder) { + super.toStringFields(builder); + builder.append(", maxTotal="); + builder.append(maxTotal); + } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/5bac43f7/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java index 48ccb98..094a6ba 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java @@ -125,9 +125,10 @@ class UserPassKey implements Serializable { @Override public String toString() { - final StringBuffer sb = new StringBuffer(50); - sb.append("UserPassKey("); - sb.append(userName).append(", ").append(userPassword).append(')'); + final StringBuffer sb = new StringBuffer(super.toString()); + sb.append("["); + sb.append(userName); + sb.append(']'); return sb.toString(); } }