跳转至

S3 客户端网盘集合(S3DiskController)

提供 KMS 知识管理模块为 **S3 客户端(rclone / AWS CLI 等)专用**的 JSON 网盘列表接口:以 KMS 统一 Resource JSON 形式返回当前用户可访问的网盘集合,便于 S3 客户端在挂载前查询桶(网盘)清单。本控制器与 S3ApiController 的 S3 协议 XML 接口互补——后者直接以 S3 ListBuckets XML 返回相同数据。

  • 接口类型:REST 资源(@RestController,方法级 produces = MediaType.APPLICATION_JSON_VALUE
  • 基址${myapps.context-path.kms:}/api/kms/s3(类级 @RequestMapping 仅声明单一前缀,/kms 备用前缀
  • Tag:kms S3 网盘模块

公共说明

  • 鉴权(据源码 S3DiskController#getUser() + S3KmsAuthService + KmsSecurityFilter + KmsS3DataPlanePath
  • 控制器层(S3KmsAuthService.authenticate:本控制器重写 getUser(),改为调用 S3KmsAuthService.authenticate(request),支持 Authorization: Bearer <accessToken>(JWT)与 Authorization: AWS4-HMAC-SHA256 ...(SigV4)两种方式(与 s3-api.md 数据面一致),将请求解析为 KmsUser
  • 过滤器层(KmsSecurityFilter:本控制器路径 /api/kms/s3/disks 不**匹配 KmsS3DataPlanePath(其仅命中 URI 前缀 /s3/kms/s3,不含 /api/kms/s3),因此**不享受 S3 数据面豁免,仍需先通过 KmsSecurityFilterSecurity.getUserIdFromToken(request) 校验。该校验按优先级依次取:query 参数 accessToken、query 参数 access_token(移动端)、请求头 accessToken、Cookie accessToken、请求头 Authorization: Bearer <token>
  • 综合效果:因外层过滤器只识别 accessToken(含 Bearer 形式),纯 SigV4 请求会被过滤器在到达控制器前以 HTTP 401 拦截;故实际可用方式为 accessToken 的任一传递形式(推荐请求头 Authorization: Bearer <token>,可同时满足过滤器与控制器两层鉴权)。
  • 执行用户:控制器内 getUser() 调用 authService.authenticate(request) 还原 KmsUser不调用 AbstractBaseController.getUser() 的 Feign 装载路径,亦**不使用 userCode 参数**。
  • 响应结构:统一 Resource(见 ../index.md「统一响应结构」),字段为 errcode/errmsg/data/errors。KMS 的 ResourceAbstractBaseController 内部类,其构造器对 data 执行 ESAPI.encode(data) 做 XSS 编码。
  • HTTP 状态码与错误码:成功 HTTP 200;控制器内 S3KmsAuthService.authenticateUnauthorizedException → 经全局异常处理器映射为 HTTP 403 / errcode=403;外层过滤器无 token 返回 HTTP 401(无响应体)。

1. S3 客户端:网盘集合(JSON)

返回当前用户可访问的网盘列表(个人网盘、公司网盘、团队网盘;公司/Wiki 网盘仅企业知识管理员可见)。语义与 DiskController#listDisksS3KmsBridgeService.listAccessibleDisks(user) 一致,区别在于本接口面向 S3 客户端、鉴权走 S3KmsAuthService

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/disks(完整:{kms-context}/api/kms/s3/disks
  • 鉴权:是(accessToken,建议以 Authorization: Bearer <token> 同时满足过滤器与控制器两层校验;据源码)
  • Tag:kms S3 网盘模块

请求参数

无。

请求示例

GET /api/kms/s3/disks HTTP/1.1
Host: kms.example.com
Authorization: Bearer __TOKEN__

响应

结构:统一 Resource(见 ../index.md「统一响应结构」)。 dataList<Disk>,当前用户可访问的网盘列表。

成功示例

{
  "errcode": 0,
  "errmsg": "ok",
  "data": [
    { "id": "__DISKID_PERSON__", "name": "个人网盘", "type": "TYPE_PERSON" },
    { "id": "__DISKID_DOMAIN__", "name": "公司网盘", "type": "TYPE_DOMAIN" }
  ],
  "errors": null
}