From cab2d1cd376410e55692e4da7d1139660ea3741d Mon Sep 17 00:00:00 2001 From: liulujian Date: Mon, 27 Jul 2026 14:14:39 +0800 Subject: [PATCH] chore(mhzc): apply minor review cleanups for listUserByQy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - #1 Remove unused IPage import in TxwMhzcYhxxbServiceImpl (line 17) - #3 Reorder mapper imports: move org.apache.ibatis.annotations.Param above com.css.* (line 14) - #4 Clarify LIKE wildcard vs SQL injection in spec §7 table and §8 step 8 - Verified: javac on both Java files compiles clean (exit 0) - Untouched per partner decision: UserController.listUserByQy public modifier, spec structure outside §7/§8 step 8 --- docs/superpowers/specs/2026-07-27-user-list-by-qy-design.md | 4 ++-- .../main/java/com/css/txw/mhzc/mapper/TxwMhzcYhxxbMapper.java | 2 +- .../css/txw/mhzc/service/impl/TxwMhzcYhxxbServiceImpl.java | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/superpowers/specs/2026-07-27-user-list-by-qy-design.md b/docs/superpowers/specs/2026-07-27-user-list-by-qy-design.md index 84dc087..1f26765 100644 --- a/docs/superpowers/specs/2026-07-27-user-list-by-qy-design.md +++ b/docs/superpowers/specs/2026-07-27-user-list-by-qy-design.md @@ -208,7 +208,7 @@ public CommonResult> listUserByQy(@RequestBody UserQyReqVO reqVO) | `dlzh` 与 `qymc` 都为空 | 返回所有有效用户-企业项,按 `lrrq DESC` | | 无匹配项 | `Page{records=[], total=0}`,HTTP 200,不抛业务异常 | | SQL 异常 | 由全局 `@RestControllerAdvice` 兜底返回 `CommonResult.error` | -| 输入含 SQL 通配符(`%`、`_`) | `#{}` 预编译参数,不会被识别为通配符,安全 | +| 输入含 SQL 通配符(`%`、`_`) | `#{}` 通过预编译参数阻断 SQL 注入(输入中的 `'` 无法闭合 SQL 字符串),因此整体上是**安全的**。但需注意:`#{}` 不会转义 MySQL LIKE 模式元字符(`%`、`_`),输入若含这些字符仍会按 LIKE 通配符匹配。例如输入 `100%`,末位 `%` 会被 MySQL 识别为通配符,等价于 `LIKE '%100<任意内容>%'`。对本接口使用场景(按名称/账号搜索)影响极小,但若将来需要严格字面量匹配,可在 SQL 内对参数做 `REPLACE(..., '%', '\\%')` + 显式 `ESCAPE '\\'`,或调用方自行过滤通配符。 | ## 8. 测试 @@ -221,7 +221,7 @@ public CommonResult> listUserByQy(@RequestBody UserQyReqVO reqVO) 5. **多企业用户**:同一 dlzh 出现多条,每条对应一个 qymc 6. **过滤被锁定用户**:`sdbz='Y'` 的用户不出现在结果中 7. **过滤无效用户**:`yxbz='N'` 的用户不出现在结果中 -8. **特殊字符**:输入 `100%` 应作为字面量参与匹配,不作为 SQL 通配符 +8. **特殊字符**:输入 `'%' OR '1'='1`(或类似注入尝试串)应被 `#{}` 预编译中性化,返回 HTTP 200 不报 500;其中注入部分(`' OR '1'='1`)因 `#{}` 不允许 `'` 闭合字符串而被作为字面量处理。需要特别注意的是:`#{}` 不会转义 LIKE 元字符,因此输入中若含 `%` 或 `_` 仍会按 MySQL 通配符匹配——例如输入 `100%` 会被解读为 `LIKE '%100<任意内容>%'`。对本按名称/账号搜索的使用场景无实际风险,但若未来需严格字面量匹配,应在 SQL 内通过 `REPLACE(...)` + 显式 `ESCAPE '\\'` 转义。 9. **分页边界**:`pageSize=10`、`pageNo` 超过总页数 → 返回空 records,total 仍正确 ## 9. 不在范围内 diff --git a/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/mapper/TxwMhzcYhxxbMapper.java b/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/mapper/TxwMhzcYhxxbMapper.java index 901bac7..5a49b39 100644 --- a/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/mapper/TxwMhzcYhxxbMapper.java +++ b/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/mapper/TxwMhzcYhxxbMapper.java @@ -2,12 +2,12 @@ package com.css.txw.mhzc.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.css.ggzc.framework.common.util.gy.GyUtils; import com.css.ggzc.framework.mybatis.core.mapper.BaseMapperX; import com.css.txw.mhzc.pojo.domain.TxwMhzcYhxxbDO; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.css.txw.mhzc.pojo.vo.UserQyReqVO; import com.css.txw.mhzc.pojo.vo.UserQyVO; import com.css.txw.mhzc.pojo.vo.UserReqVO; diff --git a/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/service/impl/TxwMhzcYhxxbServiceImpl.java b/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/service/impl/TxwMhzcYhxxbServiceImpl.java index 5bc5240..2d30650 100644 --- a/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/service/impl/TxwMhzcYhxxbServiceImpl.java +++ b/txw-mhzc/txw-mhzc-service-biz/src/main/java/com/css/txw/mhzc/service/impl/TxwMhzcYhxxbServiceImpl.java @@ -14,7 +14,6 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.css.ggzc.framework.common.pojo.CommonResult;