# datanet-router-backend **Repository Path**: BDWare/datanet-router-backend ## Basic Information - **Project Name**: datanet-router-backend - **Description**: datanet-router-backend - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-01 - **Last Updated**: 2025-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # datanet-router-backend ## 介绍 datanet-router-backend 是数联网后端组件,主要涉及三个部分,分别是irp客户端和服务器部分、路由接口部分以及yjs合约部分。 irp客户端和服务器基于irp-sdk进行开发,实现irp client 和 irp server。 路由接口部分涉及路由配置、全局管理以及接口开发。 yjs 合约部分对路由接口做进一步封装,router前端可以调用yjs接口进行相关操作。 一些相关的文档: [ypk的开发文档](https://public.internetapi.cn/docs/bdcontract/doc/v1.7.5/5_YJSInDepth.html) [ypk的运行环境](https://public.internetapi.cn/docs/bdcontract/doc/v1.7.5/1_Introduction.html) [ypk的调试](https://gitee.com/BDWare/contract-java-example) ## 项目部署 build.gradle中执行buildYPK任务会将当前项目打包成YPK文件,调用testbundle中的相应接口将YPK文件上传至指定节点。 ## 启动参数说明 GlobalRouter的启动参数: 1. auditProxyAddress为配置安装了"数联网存证审计系统"的地址。 项目地址:`https://gitee.com/BDWare/protocolauditor/sources` 2. controlProxyAddress为配置安装了"数联网运行环境"的地址。 项目地址:`https://e.gitee.com/BDWare/bdcontract-bundle/sources` 3. doId: 部署标识解析系统的前缀 4. name: 本级节点名称 5. publicKey: 本节点管理员的公钥 6. routerAddress:部署标识解析系统的的ip和端口。 7. scheme: 标识解析的协议 8. enableFlex: 布尔类型,是否启用自定义标识格式,默认为false。 9. enableBindRepo: 布尔类型,启用时,标识为仓库id+后缀格式;不启用时则为标识解析系统的前缀+后缀格式,默认为false。 10.routerAddress:部署标识解析系统的的ip和端口。 ```json { "auditProxyAddress": "tcp://39.104.209.15:2051", "controlProxyAddress": "tcp://39.104.209.15:18000", "doId": "bdtest5.r1", "name": "数瑞测试网", "publicKey": "04da01345770b7e09d4774bf6c0395399b18814aa0b7b158f64b634b8f3d628d9964af6523835225af11e467271f4969d67bf90b32eaa09f517c79b2d1f9b8a926", "routerAddress": "tcp://39.104.209.15:2041", "scheme": "irp" } ``` Router的启动参数: 1. auditProxyAddress为配置安装了"数联网存证审计系统"的地址。 项目地址: `https://e.gitee.com/BDWare/repos/BDWare/protocolauditor/sources` 2. controlProxyAddress为配置安装了"数联网运行环境"的地址。 项目地址: `https://e.gitee.com/BDWare/repos/BDWare/bdcontract-bundle/sources` 3. doId: 部署标识解析系统的前缀 4. name: 节点名称 5. publicKey: 本节点管理员的公钥 6. privateKey: 本节点管理员的私钥,为了向上级节点发起签名的验证请求。 7. scheme: 本系统所支持的标识的uri的scheme。 8. enableFlex: 布尔类型,是否启用自定义标识格式,默认为false。 9. enableBindRepo: 布尔类型,启用时,标识为仓库id+后缀格式;不启用时则为标识解析系统的前缀+后缀格式,默认为false。 10. routerAddress:部署标识解析系统的的ip和端口。 ```json { "auditProxyAddress": "tcp://39.104.209.15:2051", "controlProxyAddress": "ws://127.0.0.1:18010", "doId": "bdtest.rs", "name": "测试网科研域", "publicKey": "04303718771b9323c204e607639f14469f9a94e55b0964a408ad3b3864b0493b645d7070da0d550f0c54b934275a8e88dedc3024467b0566db5c1108b1baeaae27", "privateKey": "d675782acf011dbc01a73c7967ccff9564486f7c3a9f5d5de151caffaa18936", "upperRouterAddress": "tcp://192.168.0.3:18041", "scheme": "irp", "enableFlex": false, "enbaleBindRepo": true } ``` ## 接口文档 | 类别 | 接口协议 | 接口列表 | 调用方 | 说明 | | :------------: | :-----------------: | :---------------: | :----------------: | :--------------------------: | | 控制面标准接口 | JSON Over Websocket | resolveDoId | router用户 | 解析doid | | 控制面标准接口 | JSON Over Websocket | createLRS | router管理员 | 分配前缀(LRS) | | 控制面标准接口 | JSON Over Websocket | createRepo | router管理员 | 分配后缀(Repo) | | 控制面其他接口 | JSON Over Websocket | listLRS | router管理员 | 获取前缀列表 | | 控制面其他接口 | JSON Over Websocket | updateLRS | router管理员 | 更新前缀 | | 控制面其他接口 | JSON Over Websocket | deleteLRS | router管理员 | 删除前缀 | | 控制面其他接口 | JSON Over Websocket | getLRS | 数联网搜索引擎 | 获取LRS信息 | | 控制面其他接口 | JSON Over Websocket | listRepo | router管理员 | 获取后缀列表 | | 控制面其他接口 | JSON Over Websocket | updateRepo | router管理员 | 更新后缀 | | 控制面其他接口 | JSON Over Websocket | deleteRepo | router管理员 | 删除后缀 | | 控制面其他接口 | JSON Over Websocket | getRepo | 数联网网关 | 获取Repo信息 | | 数据面标准接口 | JSON Over Websocket | setName | router前端 | 设置当前router 名字 | | 数据面标准接口 | JSON Over Websocket | getName | router前端 | 获取当前router 名字 | | 数据面标准接口 | JSON Over Websocket | setUpperIP | router前端 | 设置上级router IP | | 数据面标准接口 | JSON Over Websocket | getUpperIP | router前端 | 获取上级router IP | | 数据面标准接口 | JSON Over Websocket | setUpperPort | router前端 | 设置上级router Port | | 数据面标准接口 | JSON Over Websocket | getUpperPort | router前端 | 获取上级router Port | | 数据面标准接口 | JSON Over Websocket | setPubKey | router前端 | 设置当前router管理员公钥 | | 数据面标准接口 | JSON Over Websocket | setSignature | router前端 | 设置当前router签名 | | 数据面标准接口 | JSON Over Websocket | getRouterInfo | router前端 | 获取当前router信息 | | 控制面标准接口 | JSON Over Websocket | reInit | router域路由器 | 向上级router验证并启动server | | 数据面标准接口 | JSON Over Websocket | setRootRouterInfo | router根路由器 | 设置根路由器信息 | | 数据面标准接口 | JSON Over Websocket | getRootPrefix | router合约测试接口 | 获取当前doid | | 数据面标准接口 | JSON Over Websocket | setRootPrefix | router合约测试接口 | 设置当前doid | ## 开发说明 接口开发主要涉及Global.java,Config.java,Router.java。 config主要涉及各种基础信息的配置,包括公钥、路由器名字、签名、上级IP,签名验证等;global主要涉及全局配置、向上级验证、以及irp客户端和服务器的启动;router主要封装了各种接口,接口具体功能见接口文档。 开发接口功能之后需要在yjs合约中对接口做进一步封装,前端通过调用合约函数来使用相应的接口功能。 ## 权限控制说明 当前,管理员(启动者)拥有全部权限。提供了基于属性的访问控制。 每个用户有一组属性,每一个`exported function`由一个属性控制(函数名)。 可通过管理员给其他用户授权。 相关的三个接口包括:`addPermission`、`removePermission`、`getPermission` 其中,`getPermission`为根据公钥、签名返回权限。 `removePermission`/`addPermission`也可作为权限授权给用户。 基于这个机制,可以实现基于角色的访问控制(RBAC)。 所需扩展: 1) 添加创建用户接口,在创建用户时,自动完成相应角色的权限添加(通过addPermission)。 2) 创建用户管理相关的UI。 3) 按需修改权限控制信息的存储方式(当前为本地kv数据库) 例如: | 角色 | 权限 | 说明 | |:-----:|:---------------------------------:|:-----------------:| | 超级管理员 | 全部 | 全部 | | 用户管理员 | addPermission、deletePermission | 可给用户授权 | | 路由管理员 | listLRS、createRepo、deleteRepo... | 具备管理下级标识解析系统的权限 | | 仓库管理员 | listRepo、createRepo、deleteRepo... | 具备后缀管理的权限 | | 普通用户 | resolveDoID | 具备 |