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 数据面豁免,仍需先通过KmsSecurityFilter的Security.getUserIdFromToken(request)校验。该校验按优先级依次取:query 参数accessToken、query 参数access_token(移动端)、请求头accessToken、CookieaccessToken、请求头Authorization: Bearer <token>。 - 综合效果:因外层过滤器只识别 accessToken(含
Bearer形式),纯 SigV4 请求会被过滤器在到达控制器前以 HTTP401拦截;故实际可用方式为 accessToken 的任一传递形式(推荐请求头Authorization: Bearer <token>,可同时满足过滤器与控制器两层鉴权)。 - 执行用户:控制器内
getUser()调用authService.authenticate(request)还原KmsUser,不调用AbstractBaseController.getUser()的 Feign 装载路径,亦**不使用userCode参数**。 - 响应结构:统一
Resource(见 ../index.md「统一响应结构」),字段为errcode/errmsg/data/errors。KMS 的Resource为AbstractBaseController内部类,其构造器对data执行ESAPI.encode(data)做 XSS 编码。 - HTTP 状态码与错误码:成功 HTTP 200;控制器内
S3KmsAuthService.authenticate抛UnauthorizedException→ 经全局异常处理器映射为 HTTP 403 / errcode=403;外层过滤器无 token 返回 HTTP401(无响应体)。
1. S3 客户端:网盘集合(JSON)¶
返回当前用户可访问的网盘列表(个人网盘、公司网盘、团队网盘;公司/Wiki 网盘仅企业知识管理员可见)。语义与 DiskController#listDisks 及 S3KmsBridgeService.listAccessibleDisks(user) 一致,区别在于本接口面向 S3 客户端、鉴权走 S3KmsAuthService。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/disks(完整:{kms-context}/api/kms/s3/disks) - 鉴权:是(accessToken,建议以
Authorization: Bearer <token>同时满足过滤器与控制器两层校验;据源码) - Tag:kms S3 网盘模块
请求参数¶
无。
请求示例¶
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:List<Disk>,当前用户可访问的网盘列表。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": [
{ "id": "__DISKID_PERSON__", "name": "个人网盘", "type": "TYPE_PERSON" },
{ "id": "__DISKID_DOMAIN__", "name": "公司网盘", "type": "TYPE_DOMAIN" }
],
"errors": null
}