APIJSON icon indicating copy to clipboard operation
APIJSON copied to clipboard

为什么限制在GETS中使用@combine

Open aldag opened this issue 3 years ago • 3 comments

在GETS请求中使用@combine时得到了这样的提示: "msg": "StandardAdvice:{} 里的 @combine:value 不合法!DELETE,GETS,HEADS 请求不允许传 @combine:value !" 查代码发现,这个检查逻辑是硬编码在AbstractSQLConfig类中的。

为什么在这些类型的请求中限制@combine的使用呢?

aldag avatar Jul 22 '22 06:07 aldag

防止前端传参越权操作,例如把后端设置的条件 AND 连接改为 OR 连接

TommyLemon avatar Jul 22 '22 07:07 TommyLemon

防止前端传参越权操作,例如把后端设置的条件 AND 连接改为 OR 连接

有些业务场景需要OR连接的查询。在AbstractSQLConfig做检查,后端也无法添加@combine,检查点能否前移呢?

aldag avatar Jul 22 '22 09:07 aldag

可以的,把 AbstractSQLConfig 里的检查移到 AbstractVerifier,判断 JSONRequest.KEY_COMBINE.equals(rk) 就抛异常 https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L1006 image

这样就可以实现前端不能传,但后端能在 Request 表指定 @combine 了

TommyLemon avatar Jul 22 '22 11:07 TommyLemon

@aldag
6.0.0 已支持后端在 Request 表中为 GETS/PUT/DELTE 的请求配置 @combine,感谢 @cloudAndMonkey 的贡献 https://github.com/Tencent/APIJSON/pull/493

TommyLemon avatar Feb 16 '23 07:02 TommyLemon