【问题标题】:Caused by: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "admin"原因:org.postgresql.util.PSQLException:致命:用户“admin”的密码验证失败
【发布时间】:2016-11-20 12:16:24
【问题描述】:

当我尝试使用我的凭据(pgadmin iii - postgres sqltool)连接到我的 PostgreSQL 服务器时,它工作正常。当我尝试从我的 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>

非常感谢您对此的任何帮助,由于这个奇怪的错误,我无法取得进展。

【问题讨论】:

  • 请在postgresql.conf中设置log_connections=on,用pg_ctl reload重新加载,重试并从PostgreSQL服务器日志中发布消息。
  • 我按照建议进行了更改,在 postgresql.conf 中设置 log_connections=on 并执行查询 SELECT pg_reload_conf();返回 t。当我尝试从我的应用程序连接时,问题仍然存在。请问有什么建议可以完成这项工作吗?
  • 请按照我的建议在 PostgreSQL 服务器日志中发布连接尝试失败的消息。
  • 我看到控制台打印了查询中发布的上述日志,你的意思是别的吗?
  • 是的,我指的是PostgreSQL server log不是 JVM 输出。

标签: java spring postgresql jdbc


【解决方案1】:

在 Login 部分下创建一个新用户并在 application.properties 中使用该用户,可以解决此问题。

【讨论】:

    【解决方案2】:

    如果您还没有尝试过,请查看您的 pg_hba.conf 文件。它将被命名为

    /etc/postgresql/9.6/main/pg_hba.conf # Ubuntu 16.04
    /var/lib/pgsql/9.3/data/pg_hba.conf # Fedora 20
    

    您可能必须使用 find / -name pg_hba.conf 来定位它。

    在文件的底部,将 METHOD 值更改为 trust 以进行本地测试(有关完整信息,请参阅 postgres 文档)。重新启动 postgres 以确保一切正常启动并读取新参数:

    sudo systemctl restart postgresql     # ubuntu
    

    希望这能解决你的问题。它解决了我在 Ubuntu/Fedora 上的问题。

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2013-11-15
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2018-02-07
      • 2020-10-13
      • 2017-12-16
      相关资源
      最近更新 更多