gpt4 book ai didi

java - ORA-01017: 用户名/密码无效;使用 wss4j 时登录被拒绝

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:56 25 4
gpt4 key购买 nike

我有许多测试可以毫无问题地访问我们的 Oracle 数据库,但是当我运行这些测试以及我们代码库中使用 keystore 的其他测试时,与数据库交互的测试不再能够连接。这是他们得到的异常(exception):

Caused by: java.sql.SQLException: ORA-01017: invalid username/password; logon denied at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:381) at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564) at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366) at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359) at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:531) at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:221) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503) at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:877) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851) ... 68 more

显然用户名和密码仍然正确。我真的很难弄清楚我们的代码中是什么导致连接失败,而且我真的不知道如何调试 Oracle 驱动程序尝试连接时发生的情况。我在 Oracle 11g 中使用 Oracle 瘦驱动程序。我们使用 Spring、Hibernate 和 Apache Commons DBCP。似乎驱动程序可能正在尝试与数据库建立 SSL 连接?不过我不确定。我似乎还记得我们还在使用 SQL Server 时遇到的一个非常相似的问题,当时我只是忽略了它。现在,我们在单独的批处理和 JVM 中运行与 keystore 交互的测试。

如有任何帮助,我们将不胜感激。

已更新

我进行了更多的调试,最后将其追溯到我们通过 Spring-WS 使用 wss4j 库(版本 1.5.9)。最终,WSSConfig 类获得一组执行此操作的代码:

int ret = 0;
for (int i = 0; i < provs.length; i++) {
if ("SUN".equals(provs[i].getName())
|| "IBMJCE".equals(provs[i].getName())) {
ret =
java.security.Security.insertProviderAt(
(java.security.Provider) c.newInstance(), i + 2
);
break;
}
}

在这段代码之后,我与 Oracle 的连接立即停止工作。看起来当使用充气城堡提供程序调用 insertProviderAt 方法时,我的 Oracle 连接开始失败。有什么想法吗?

最小测试用例

第一次连接尝试成功,但第二次尝试失败。

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@server/servicename", "username", "password");
conn.prepareStatement("select * from dual").getResultSet();
conn.close();
org.apache.ws.security.WSSConfig.getDefaultWSConfig();
conn = DriverManager.getConnection("jdbc:oracle:thin:server/servicename", "username", "password");
conn.prepareStatement("select * from dual").getResultSet();
conn.close();

WSSConfig 初始化方法

private synchronized void
staticInit() {
if (!staticallyInitialized) {
org.apache.xml.security.Init.init();
if (addJceProviders) {
/*
* The last provider added has precedence, that is if JuiCE can be added
* then WSS4J uses this provider.
*/
addJceProvider("BC", "org.bouncycastle.jce.provider.BouncyCastleProvider");
addJceProvider("JuiCE", "org.apache.security.juice.provider.JuiCEProviderOpenSSL");
}
Transform.init();
try {
Transform.register(
STRTransform.implementedTransformURI,
"org.apache.ws.security.transform.STRTransform"
);
} catch (Exception ex) {
if (log.isDebugEnabled()) {
log.debug(ex.getMessage(), ex);
}
}
staticallyInitialized = true;
}
}

最佳答案

缺少第二个连接字符串中的添加符号

关于java - ORA-01017: 用户名/密码无效;使用 wss4j 时登录被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com