# 其他功能
# 漏洞检测
项目目前使用 classgraph ,在 dev 环境下对当前项目的类进行扫描,从而检测出常见的 bug,并将校验结果打印在控制台。目前实现了以下常见 bug 的校验(代码位于 com.htnova.common.dev 目录下):
- Dto 中定义的 Long 类型字段需要加上
@JsonSerialize(using = ToStringSerializer.class)注解,防止前端数字类型精度丢失问题 - 项目中推荐使用 LocalDateTime,检测到 Date 类型的字段则进行提醒
- 校验数据库表和实体的数量是否匹配,以及每张表和实体的字段名称是否匹配
- 发生继承的 java bean,是否使用了
@SuperBuilderlombok 注解 - mybatis 的 xml 非 String 类型的字段,是否与空字符串进行了比较,例如:
<if test="deptDto.createTime != null and deptDto.createTime != ''"> - mybatis 的 xml 是否使用
${param},可能引起 sql 注入问题
提示
校验的类使用了懒加载的机制,非 dev 环境下不会注入到 spring 容器中
# 历史查询
需求是新建表单时,用户输入过的内容能够再次提示出来。使用 classgraph 在初始化时扫描所有带有 @QueryHistoryField 注解的实体属性,形成一个白名单,只有该名单内的属性才能进行历史查询,这样防范了 sql 注入的问题。
@QueryHistoryField 支持 value 属性,默认不写 value 的情况,将属性名进行驼峰转下划线,进行 sql 查询;当属性名和表字段不一致时,可自行指定 value 的值为表字段名。
前端访问 /query/history 接口,参数为 (String table, String fields) ,其中 fields 支持逗号拼接,也就是查询一张表的多个字段的历史记录,table 和 fields 可驼峰可下划线,已进行了兼容处理
# 流水单编号生成
如果业务的每条记录都需要增加流水号,可以让业务实体实现 BizNumber 接口,并调用 BizNumberService.computeBizNumber 方法,该方法返回一个一串数字,例如 202009150002,表示 2020 年 09 月 15 日的第 2 个单号
← 工作流