使用Java Neo4j Rest Api进行身份验证以访问服务器

时间:2015-06-12 07:38:10

标签: java rest neo4j

我开始使用Neo4j Rest Api但是当我尝试连接服务器时出现以下错误:

int count = fieldList.Count();
var result = string.Join(", ", fieldList.Take(count > 1 ? count - 1 : count))
    + (count > 1 ? " and " + fieldList.Last() : string.Empty);

这个错误似乎是正常的,因为我在使用请求时没有对服务器进行身份验证。在Neo4j 2.2.2手册(http://neo4j.com/docs/stable/rest-api-security.html)中我读过我收到此错误的原因是:

请求应包含一个Authorization标头,其值为Basic,其中“payload”是base64编码的字符串“username:password”。 示例请求 获取http://localhost:7474/user/neo4j 接受:application / json;字符集= UTF-8 授权:基本bmVvNGo6c2VjcmV0

但是我无法摆脱这个错误,因为我不知道如何在我的请求中包含标题!以下是我的代码中的请求示例:

{
  "errors" : [ {
    "code" : "Neo.ClientError.Security.AuthorizationFailed",
    "message" : "No authorization header supplied."
  } ]
}

因此,如果有人可以帮我根据我的要求对服务器进行身份验证,那可能会非常有用!

由于

2 个答案:

答案 0 :(得分:5)

在Jersey 1.x中,您可以为客户端实例提供处理身份验证的过滤器:

Client client = Client.create()
client.addFilter(new HTTPBasicAuthFilter("neo4j","<mypwd>")); // <-- that's it!
WebResource resource = client.resource(
    "http://localhost:7474/db/data/transaction/commit"
);

ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
   .type( MediaType.APPLICATION_JSON )
   .post( ClientResponse.class, someStringContainingJsonPayload);

答案 1 :(得分:1)

另一种方法是完全禁用身份验证。 为此,请打开conf/neo4j-server.properties文件并将dbms.security.auth_enabled设置为false。重新启动服务器,您无需进行身份验证。

现在我不是说你应该让任何人访问Neo4j服务器。那是个坏主意。但是你可以做的是让服务器只监听本地网络和/或通过(硬件)防火墙限制对运行数据库的机器的访问。另一个安全级别是在连接到您的应用程序的docker容器中使用neo4j。

身份验证是一项新功能,仅以简单的形式包含在2.2版中,因为很多人都要求它。我所知道的与Neo4j在生产中合作的公司不依赖于Neo4j的身份验证功能,而是将其关闭(过多的开销)并依赖于上面简要描述的方法。

最后,只有应用程序服务器才能访问Neo4j。

相关问题