spring 原因是:org. postgresql. util.致命:用户"admin"的密码验证失败

wsxa1bj1  于 2023-03-07  发布在  Spring
关注(0)|答案(5)|浏览(174)

当我尝试使用我的凭据连接到我的PostgreSQL服务器使用(pgadmin iii - postgres sqltool)它工作正常。当我尝试从我的java应用程序连接我得到下面的日志。这很奇怪

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is org.postgresql.util.PSQLException: FATAL: password authentication failed for user "admin"
    at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:240)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy8.getCollegeDetails(Unknown Source)
    at com.cts.bo.HESBO.registerCourse(HESBO.java:42)
    at com.cts.facade.HESFacade.registerCourse(HESFacade.java:34)
    at com.cts.manager.HESManager.registerCourse(HESManager.java:34)
    at com.cts.presentation.Tester.registerCourse(Tester.java:66)
    at com.cts.presentation.Tester.main(Tester.java:159)
**Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "admin"**
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:415)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:188)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:143)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
    at org.postgresql.jdbc3g.Jdbc3gConnection.<init>(Jdbc3gConnection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:412)
    at org.postgresql.Driver.connect(Driver.java:280)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:164)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
    at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:202)
    ... 11 more

.properties文件

jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/postgres

jdbc.password=admin
jdbc.username=admin

spring.xml

<bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>com\cts\resource\constant.properties</value>
        </property>
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean> 

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

任何帮助,这是非常感谢,我只是不能进步,因为这个奇怪的错误。

jucafojl

jucafojl1#

我认为问题可能是postgres数据库被配置为只允许使用md5散列的密码。
您可以转到配置文件pg_hba.conf来检查是否为true。如果您发现属性host all all all配置如下,请使用该属性进行搜索:

host all all all md5

问题是您需要将密码散列为md5。您可以通过将配置更改为以下内容来解决此问题:

  • trust而不是md5-〉将允许用户在没有任何密码的情况下进行连接
  • password而不是md5-〉将允许用户使用纯文本密码进行连接
mo49yndu

mo49yndu2#

虽然我在Docker容器中运行PostgreSQL服务器,但我也遇到了同样的问题。我通过使用不同的端口Map(Eidogg. 0. 0. 0:5433-〉5432/tcp)修复了它。
症状和调试:

  • 错误消息为“org.postgresql.util.PSQLException:致命:用户xxx”的密码验证失败。
  • 更改JDBC主机、端口或用户名会导致不同的错误消息。
  • PgAdmin能够连接到数据库。
  • PgAdmin连接显示在PostgreSQL日志中(启用连接日志记录后),但尝试与JDBC连接时没有显示任何内容。
  • tcpdump port 5432在尝试与JDBC连接时什么也不显示,但在与PgAdmin连接时或使用netcat发送随机数据时显示了一些内容。

最后,根本原因仍然不清楚,但显然不是密码问题,所以JDBC驱动程序不应该说是密码问题。
Docker版本20.10.17运行在Windows 10上。PostgreSQL驱动程序版本为42.4.1。

xxb16uws

xxb16uws3#

对我来说,当我更新版本时,它起作用了

<dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
        <version>42.5.0</version>
</dependency>
sh7euo9m

sh7euo9m4#

您可能需要允许一个IP或一个IP地址范围连接到PostgreSQL。
例如,如果您正在使用Docker,问题可能是您不允许PostgreSQL使用Docker网络。
1.获取Docker网络接口上的主机IP地址(ip addr show docker0 | grep 'inet');
1.允许您的IP地址以pg_hba.conf连接到Postgre。
例如,如果您只想允许一个IP地址,则可以在地址末尾使用/32,或者在后面写入255.255.255.255子网掩码,如下所示:

host    all     all     172.17.0.1        255.255.255.255     md5

host    all     all     172.17.0.1/32     md5

有关pg_hba.conf文件结构的详细信息,请阅读the PostgreSQL documentation

k3bvogb1

k3bvogb15#

在“登录”部分下创建一个新用户,并在www.example.com中使用该用户application.properties,可解决此问题。

相关问题