You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot整合Neo4J Docker容器时客户端认证失败求助

问题排查思路:Spring Data Neo4j连接Docker版Neo4j 4.4.11认证失败

场景回顾

项目基于Spring Boot + Spring Data Neo4j配置,application.properties配置如下:

spring.neo4j.uri=neo4j://localhost:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=verySecret357

自定义配置类仅声明事务管理器:

@Configuration
public class Neo4jConfiguration {

    @Bean
    public ReactiveNeo4jTransactionManager reactiveTransactionManager(Driver driver,
                                                                      ReactiveDatabaseSelectionProvider databaseNameProvider) {
        return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
    }

}

通过Docker启动Neo4j 4.4.11社区版:

docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e 'NEO4J_AUTH=neo4j/verySecret357' neo4j:4.4.11-community

HTTP界面可正常登录,但Spring Boot应用创建节点时抛出:

org.neo4j.driver.exceptions.AuthenticationException: The client is unauthorized due to authentication failure.

调试发现客户端认证scheme正确,但authToken格式不符合预期,独立部署的Neo4j无此问题,怀疑Docker镜像相关。


排查步骤

1. 修复跨版本认证协议兼容性问题

Neo4j 5.x系列的Java驱动默认可能启用了较新的认证方案(如Bearer Token),但Neo4j 4.4.x仅支持Basic认证。需显式指定认证scheme:
在application.properties中添加:

spring.neo4j.authentication.scheme=basic

或自定义Driver Bean时手动构造Basic认证Token:

@Bean
public Driver neo4jDriver() {
    AuthToken authToken = AuthTokens.basic("neo4j", "verySecret357");
    return GraphDatabase.driver("neo4j://localhost:7687", authToken);
}

2. 验证Docker容器内的认证配置是否生效

进入容器查看Neo4j配置文件,确认认证未被覆盖:

docker exec -it neo4j grep -n "dbms.security.auth_enabled" /var/lib/neo4j/conf/neo4j.conf

确保输出为dbms.security.auth_enabled=true,同时检查是否有其他认证相关配置(如LDAP、单点登录)干扰默认Basic认证。

3. 重置Docker容器的密码(避免旧数据卷干扰)

若容器首次启动时已挂载过数据卷,NEO4J_AUTH环境变量不会覆盖已存在的密码。需彻底清理容器和数据后重新初始化:

# 停止并删除容器
docker stop neo4j && docker rm neo4j
# 删除关联数据卷(若未指定自定义卷,默认卷名称可通过docker volume ls查找)
docker volume rm $(docker volume ls | grep neo4j | awk '{print $2}')
# 重新启动容器
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e 'NEO4J_AUTH=neo4j/verySecret357' neo4j:4.4.11-community

4. 校验Bolt端口的连通性与认证

跳过Spring框架,用原生驱动测试Bolt连接,排除Spring配置问题:

import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Driver;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.Session;

public class BoltTest {
    public static void main(String[] args) {
        try (Driver driver = GraphDatabase.driver("neo4j://localhost:7687", AuthTokens.basic("neo4j", "verySecret357"))) {
            try (Session session = driver.session()) {
                String result = session.run("RETURN 'Hello' AS message").single().get("message").asString();
                System.out.println(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

若测试仍失败,说明问题出在Docker容器的Bolt服务配置;若测试成功,则排查Spring Data Neo4j的自动配置是否被自定义类干扰。

5. 对齐驱动与服务器版本

Neo4j官方推荐驱动版本与服务器版本保持一致或在兼容范围内。当前使用5.2.0驱动连接4.4.11服务器,跨大版本可能存在兼容性问题。可将驱动版本降级至4.4.x系列(如4.4.11),修改pom.xml(Maven)或build.gradle(Gradle)中的依赖版本:

<!-- Maven示例 -->
<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>4.4.11</version>
</dependency>

内容的提问来源于stack exchange,提问作者veebee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:20:30