新功能
统一认证
-
三种方式:「配置管理 → 外部认证」统一配置启用开关、认证方式、管理员用户名列表与门户登录/退出地址。账号密码方式支持表单或 JSON、请求/响应字段名(响应可用 data.user 点路径)、成功标识与超时,密码只经过内存。
-
网关头:只采信直接 TCP 对端位于回环或 app.security.trusted-proxies 内的请求;可选共享密钥头(加密存储、常量时间比较)。
-
票据:/sso/entry?ticket=… 服务端校验通过才建立会话;票据不写审计、不在页面回显。
-
外部用户只保留会话:不写入 app_user,没有本地密码和改密入口;管理员由配置的用户名列表,或响应字段/请求头标记决定。
-
登录页分流:/login 按当前认证方式展示本地表单或门户引导页,本地表单在 /login/local。
-
应急恢复:关闭本地登录前必须先启用外部认证;若外部认证随后不可用,以 JYN_RESET_LOGIN=true 启动一次即可重新打开本地登录。
导航与系统日志
-
导航分组:「配置管理」(数据库连接、AI 配置(已启用时)、外部认证(仅管理员))与「日志管理」(变更日志、审计日志(仅管理员)、系统日志);看板、同步任务、系统信息保持顶级,窄屏抽屉里分组可展开。
-
系统日志页(/system-logs,所有登录用户):按文件、级别与关键字过滤并高亮,滚动归档按 gzip 读取;最多扫描 16 MB,返回最近 1000 条匹配行并提示是否截断。
-
文案统一:界面各处「项目」改为「同步任务」,路由、数据表与 API 不变。
数据核对与全量对比
停止同步
更新检测
-
版本号相同也能发现安装包被重新发布:GitHub 比对附件 SHA-256,Gitee 退化为对下载地址发 HEAD 取 Content-Length;只有能证明不同才提示,证明不了时一律按已是最新处理。
-
同版本的「一键升级」仅在确认制品不同时放行(拒绝发生在下载之前);设置页可「忽略此提示」,发布方再上传新文件会自动重新提醒。
-
app.update-check.match-artifact=false 回到只比版本号。
修复
-
CDC 批量写入不再退化为平方复杂度:事务内同一主键的多个镜像此前靠逐个扫描折叠,批量 REPLACE/MERGE 或数据修复会随事务行数呈平方增长——十万行的事务光折叠就要二十多秒,消费线程期间不推进位点。现在按主键索引折叠,代价随行数线性;同一事务内同一行的多个镜像只按最终结果下发一次,目标端语句也更少。
-
源库删表只在能看见整个 schema 时联动:源库账户被收回单表授权时,该表会从清单里消失,与真删表同形,此前会把目标表一起删掉。现在只有能看见整个 schema(表属主、库级 SELECT、SELECT ANY TABLE、SQL Server VIEW DEFINITION,PostgreSQL 系恒可见)时才把清单缺项当作删表,否则保留目标表并告警一次。
-
目标表被重建后重置进度:不再沿用旧游标在空表上跑增量窗口,改为按首次加载重新灌入,变更日志正确记为插入。
-
CDC 停车/停机时释放连接:不再残留 keepalive 拉流,避免继续占用同一 server_id 把其他实例踢下线。
-
CDC 单事务缓冲加上限:一个源事务必须整笔驻留内存直到提交,超大事务此前可能耗尽堆内存,又会被当成可重试错误反复重连重放。现在超过 sync.cdc.max-transaction-rows / max-transaction-bytes 即按非瞬态失败停车,并提示调小批次、提高上限或改用轮询。
-
PostgreSQL 分区表与物化视图可被发现:此前表清单只包含普通表与视图,声明式分区表和物化视图无法选择;现在一并列出(分区子表仍单独可见)。
-
变更日志「只显示失败」下清空只删失败记录:此前这个按钮会清空全部日志,包括用户仍在查看的成功记录。
-
卡住的同步轮次可见:详情页显示「上一轮仍在执行」,无进展超过 sync.stuck-threshold-ms(默认 30 分钟)时标红「疑似卡死」,已过期的残留租约单独标注。
-
一键升级的限流提示:匿名 API 超限返回 403/429 时明确说明是限流,建议切换下载源或稍后重试,不静默换源;Windows 重启脚本在非 ASCII 路径下也能正常重启与回滚。
安全加固
-
网关头只信任可信代理来源;共享密钥加密存储、常量时间比较,无法解密时一律拒绝。
-
OA / 票据地址只接受 http(s),不跟随重定向,响应体上限 64 KB。
-
登录失败按「用户名 + 客户端 IP」计数(5 次锁 15 分钟),票据入口按 IP 限流;审计不记录密码、票据与响应内容。
-
系统日志页白名单文件名并校验真实路径,拒绝 ../ 与符号链接逃逸;日志文本逐段转义后才插入高亮标记。
兼容性说明
-
默认行为不变:升级后外部认证未启用,访问 /login 302 到 /login/local,本地账号照常使用。
-
新增表:oa_auth_config、update_artifact_dismissal 由 ddl-auto=update 首次启动自动创建;随 ./data 一起备份。
-
新增配置/环境变量:app.update-check.match-artifact(默认 true)、sync.stuck-threshold-ms(默认 1800000,0 关闭)、sync.cdc.max-transaction-rows(默认 1000000)、sync.cdc.max-transaction-bytes(默认 536870912,0 表示该维度不限)、JYN_RESET_LOGIN、JYN_COOKIE_SAME_SITE(默认 lax,iframe 嵌入需配合 HTTPS 设为 None)。
-
旧地址:/oa/settings 保留为 302 → /external-auth(仅 GET)。
-
同步行为不变:同步数据路径与类型映射不变;本次新增 CDC 缓冲上限、把 CDC 事务折叠改为线性、补齐 PostgreSQL 对象发现,并修正 CDC 停车时的连接释放。
测试与升级
GITHUB: https://github.com/vfaner/jync/releases/download/v1.8.0/jync.jar
Gitee: https://gitee.com/super_rgh/jync/releases/download/v1.8.0/jync.jar