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

如何配置ObjectBox Sync数据过滤实现用户专属数据同步?

ObjectBox Sync 用户专属数据过滤配置方案

要实现每个用户仅能在其设备上同步自身专属数据,核心是通过数据标识+同步过滤规则+用户认证的组合方案,具体步骤如下:

1. 数据模型添加用户归属标识

给所有需要同步的实体类新增一个userId字段,用来标记数据所属的用户,确保该字段被ObjectBox持久化:

@Entity
data class Task(
    @Id var id: Long = 0,
    var title: String = "",
    var isCompleted: Boolean = false,
    var userId: String = "" // 核心:标记数据归属用户
)

2. Sync Server 端配置过滤规则

ObjectBox Sync Server支持基于客户端身份的订阅过滤器,确保每个客户端仅能同步匹配自身用户ID的数据:

代码方式配置(以Java为例)

在服务器端处理客户端连接时,从认证信息中提取用户ID,为该连接设置实体过滤规则:

syncServer.addConnectionListener(new SyncConnectionListener() {
    @Override
    public void onConnected(SyncConnection connection) {
        // 从客户端认证令牌中解析出用户ID(比如JWT解析)
        String userId = parseUserIdFromAuthToken(connection.getAuthToken());
        
        // 为Task实体设置过滤:仅同步userId匹配的数据
        connection.setSubscriptionFilter(
            Task.class, QueryBuilder.equal(Task_.userId, userId)
        );
        
        // 对其他需要同步的实体重复设置过滤规则
    }
});

配置文件方式(JSON)

若使用Sync Server的配置文件启动,可通过变量绑定实现动态过滤,@userId为认证后提取的用户变量:

{
  "subscriptions": [
    {
      "entity": "Task",
      "query": "userId == @userId"
    },
    {
      "entity": "Note",
      "query": "userId == @userId"
    }
  ]
}

3. 客户端配合认证与本地过滤

客户端连接Sync Server时,必须携带可靠的用户认证信息(比如JWT令牌),同时本地查询也需过滤当前用户数据,确保一致性:

// 携带用户认证信息连接Sync Server
val syncCredentials = SyncCredentials.jwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...") // 包含user_A的ID
val syncClient = Sync.client(boxStore, "ws://your-sync-server:9999", syncCredentials)

// 本地查询仅获取当前用户的数据
val userTasks = boxStore.boxFor(Task::class.java)
    .query()
    .equal(Task_.userId, "user_A")
    .build()
    .find()

4. 关键注意事项

  • 认证必须安全:采用JWT/OAuth2等可靠认证方式,确保Sync Server能准确识别用户身份,避免越权访问。
  • 实体全覆盖:所有需要同步的实体都要添加userId字段并配置对应过滤规则,防止遗漏数据导致泄露。
  • 初始同步优化:首次同步时过滤器直接生效,客户端只会拉取符合自身用户ID的数据,无需全量同步。
  • 实时同步触发:数据更新时,仅符合当前客户端过滤条件的变更会被推送,无效变更不会占用带宽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:49:58