neo4j使用详解(十九、java driver高级连接及安全——最全参考)

请添加图片描述

Neo4j系列导航:
neo4j安装及简单实践
cypher语法基础
cypher插入语法
cypher插入语法
cypher查询语法
cypher通用语法
cypher函数语法
neo4j索引及调优
neo4j java Driver等更多


1.高级连接信息

1.1.连接uri

驱动程序支持连接到表单的uri: <SCHEME>://<HOST>[:<PORT>[?policy=<POLICY-NAME>]]

  • <SCHEME>是neo4j、neo4j+s、neo4j+ssc、bolt、bolt+s、bolt+ssc中的一个。
  • <HOST>是Neo4j服务器所在的主机名。
  • <PORT> 是可选的,表示Bolt协议可用的端口。
  • <policy - name >是可选的服务器策略名称。服务器策略需要在使用之前设置。

驱动程序不支持连接到嵌套路径,例如example.com/neo4j/。服务器必须可以从域根访问。

1.2.连接协议和安全性

驱动程序和服务器之间的通信由Bolt进行调解。服务器URI的模式决定连接是否加密,如果加密,则决定接受哪种类型的证书。

URL scheme加密注释
neo4j×本地设置的默认值
neo4j+s (只适用于CA-signed证书)默认为Aura
neo4j+ssc (CA- 和 self-signed证书)

驱动程序在连接成功时从服务器接收路由表,而不管实例是适当的集群环境还是单机环境。驱动程序的路由行为与Neo4j的集群协同工作,将读/写事务定向到适当的集群成员。如果希望以特定的机器为目标,请使用bolt、bolt+s或bolt+ssc URI模式。

要使用的连接模式是由服务器需求决定的。必须事先了解正确的服务器模式,因为在连接之前不会公开元数据。如果不确定,请咨询数据库管理员。

1.3.身份验证方法

1.3.1.Basic 认证(默认)

Basic身份验证方案依赖于传统的用户名和密码。这些凭证可以是本地安装的凭证,也可以是Aura实例提供的凭证。
```java
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;

GraphDatabase.driver(dbUri, AuthTokens.basic(dbUser, dbPassword));
```
> 基本身份验证方案也可用于针对LDAP服务器进行身份验证(仅限企业版)

1.3.2.Kerberos认证

Kerberos身份验证方案需要base64编码的票证。只有在服务器安装了Kerberos Add-on时才能使用它。
```java
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;

GraphDatabase.driver(dbUri, AuthTokens.kerberos(ticket));
```

1.3.3.Bearer认证

Bearer身份验证方案需要一个由身份提供者通过Neo4j的单点登录功能提供的base64编码令牌
```java
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;

GraphDatabase.driver(dbUri, AuthTokens.bearer(ticket));
```
> 承载认证方案需要在服务器端配置单点登录。配置完成后,客户端可以通过Discovery API发现Neo4j的配置。

1.3.4.自定义身份验证

使用AuthTokens.custom()登录到具有自定义身份验证方案的服务器。
```java
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;

GraphDatabase.driver(dbUri, AuthTokens.custom(principal, credentials, realm, scheme, parameters));
```

1.3.5.无认证

如果在服务器上禁用了认证,则可以完全省略认证参数

2.日志记录

默认情况下,驱动程序通过Java日志框架Java .util.logging记录INFO消息。要更改驱动程序的日志记录行为,请在创建driver对象时使用.withlogging()方法。

import java.util.logging.Level;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Config;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.Logging;

try (var driver = GraphDatabase.driver(dbUri, AuthTokens.basic(dbUser, dbPassword),
    Config.builder().withLogging(Logging.console(Level.FINE)).build())) {
    driver.verifyConnectivity();
}

3.自定义地址解析器

在创建Driver对象时,您可以指定一个解析器函数来解析初始化驱动程序的连接地址。

注意: 驱动程序在路由表中接收的地址不能用自定义解析器解析。

可以通过.withresolver()配置方法指定解析器,该方法与ServerAddress对象一起工作。

import java.util.Set;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Config;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.net.ServerAddress;

// 连接到example.com:9999被解析到localhost:7687
var addresses = Set.of(
    ServerAddress.of("localhost", 7687)  // omit the scheme; provide only host
);
var config = Config.builder()
    .withResolver(address -> addresses)
    .build();
try (var driver = GraphDatabase.driver("neo4j://example.com:9999", AuthTokens.basic(dbUser, dbPassword), config)) {
    driver.verifyConnectivity();
}

4.OCSP装订

如果服务器上启用了OCSP装订,则可以配置驱动程序在SSL握手期间检查证书吊销。使用CA签名的证书时,OCSP装订提高了安全性和性能。
有两种方法实现此功能:

这两种方法都作用于一个Config.TrustStrategy对象,因此您必须明确要信任哪些证书,并且不能依赖驱动程序从连接URI(本文4.1) 方案中推断证书。这意味着您必须将这些方法链接到Config.TrustStrategy.trustSystemCertificates()。为了避免配置冲突,连接URI方案也必须设置为neo4j(即不是neo4j+s也不是neo4j+ssc)。

import org.neo4j.driver.Config;

// 验证证书的装订,但如果没有发现装订,则不会验证失败
Config config = Config.builder()
    .withEncryption()
    .withTrustStrategy(Config.TrustStrategy
        .trustSystemCertificates()
        .withVerifyIfPresentRevocationChecks())  // mark-line
    .build();
try (var driver = GraphDatabase.driver(dbUri, AuthTokens.basic(dbUser, dbPassword), config)) {
    driver.verifyConnectivity();
}

5.其他连接参数

驱动程序配置参数:API文档-Driver.graphdatabase

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值