服务器要求使用SCRAM身份验证,但未提供密码。

7
我一直在使用servlets+jsp、JDBC和Tomcat作为servlet容器编写Java Web应用程序。当我连接数据库并尝试获取一些数据时,我遇到了一个异常:这里输入图片描述 项目结构:这里输入图片描述 数据源代码:
public class LibraryDataSource {
    private static final Logger LOGGER = Logger.getLogger(LibraryDataSource.class);

    private LibraryDataSource() {}

    public static DataSource getLibraryDataSource() {
        PGSimpleDataSource libraryDatasource = new PGSimpleDataSource();

        try(FileReader propertiesReader =
                    new FileReader("src/main/resources/application.properties")) {

            Properties databaseProperties = new Properties();
            databaseProperties.load(propertiesReader);
            libraryDatasource.setURL(databaseProperties.getProperty("postgresUrl"));
            libraryDatasource.setUser(databaseProperties.getProperty("postgresUser"));
            libraryDatasource.setPassword(databaseProperties.getProperty("postgresPassword"));
        } catch (FileNotFoundException e) {
            LOGGER.info("LibraryDataSource::getLibraryDataSource : ", e);
        } catch (IOException e) {
            LOGGER.info("LibraryDataSource::getLibraryDataSource : ", e);
        }

        return libraryDatasource;
    }
}

在BookDAO方法中发现错误:

@Override
    public List<Book> getAll() {
        List<Book> books = new ArrayList<>();
        try(Connection connection = dataSource.getConnection()) {
            Statement getAllStatement = connection.createStatement();
            ResultSet resultSet = getAllStatement.executeQuery("SELECT * FROM Book");

            while (resultSet.next()) {
                Book book = new Book();
                book.setId(resultSet.getLong(1));
                book.setTitle(resultSet.getString(2));
                book.setYear(resultSet.getInt(3));
                book.setQuantity(resultSet.getInt(4));
                book.setAuthors(resultSet.getString(5));

                books.add(book);
            }
        } catch (SQLException e) {
            e.printStackTrace();

        }
        return books;
    }
3个回答

14
我希望还不算太晚。 在我的项目中,我只需为数据库用户分配密码,例如我的情况是'postgres'。
ALTER USER "postgres" WITH PASSWORD 'password';

在您的application.properties文件中,您必须有类似以下内容(我正在使用PostgreSQL):

spring.datasource.url=jdbc:postgresql://localhost:5432/db_name
spring.datasource.username=postgres
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.format_sql=true

提示:我是 Stack Overflow 的新手,希望我的回答能有所帮助。


非常感谢。我已经解决了我的问题 :) - IDragunov
谢谢,我从你的答案中得到了解决我的问题的线索。顺便说一下,欢迎来到 Stackoverflow! - shaneeqa

2

spring.datasource.password = 你的密码

你只需要检查该行代码是否在你的 application.properties 文件中被激活或未被注释掉。然后你就可以再次运行项目了。


1
我在我的项目中通过为数据库用户分配一个密码来解决了这个问题,对我来说是'postgres'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接