chore(mhzc): apply minor review cleanups for listUserByQy
- #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
This commit is contained in:
parent
803e38232a
commit
cab2d1cd37
@ -208,7 +208,7 @@ public CommonResult<Page<UserQyVO>> 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<Page<UserQyVO>> 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. 不在范围内
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user