如何重构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
WatcherHangzhou
V2EX    程序员

如何重构?

  •  
  •   WatcherHangzhou 2018-01-06 14:10:11 +08:00 3050 次点击
    这是一个创建于 2923 天前的主题,其中的信息可能已经有所发展或是发生改变。

    维护一个老系统,有很多让用户输入 int 字段值的接口,且前端没做数字范围校验,

    数据库 int 字段值有最大值 21 亿多点,很多 html 表单里用户可以直接提交这种 int 值,

    于是报错到数据库时就抛超出数据库数字范围异常了。

    这种 html 表单很多,数据库实体类也很多,六七十个吧,我是应该人肉手动在所有 XX 是 int 类型的 setXX 方法里,判断 XX 大于最大值,就覆盖为最大值,还是研究代码找一种改动最少的办法,让后端判断是 int 类型,且数字大于最大值时用 int 最大值覆盖掉?

    第 1 条附言    2018-01-06 14:50:49 +08:00
    解决了,

    ORM 支持通过注释来限制 int 大小,

    于是我写了个脚本,还好要限制大小的字段名都类似(都是 quantity 这种名字), 在那些要限制大小的实体类的属性代码附近,加上用于限制 int 大小的注释就好了,超过大小仍旧抛异常信息,但不返回数据库的异常信息。
    8 条回复    2018-01-06 15:33:27 +08:00
    zhx1991
        1
    zhx1991  
       2018-01-06 14:19:30 +08:00
    底层设计不合理, 怎么改都很恶心.

    感觉前端做限制更简单.
    wekw
        2
    wekw  
       2018-01-06 14:26:21 +08:00
    直接写一个检查函数,把需要过滤的字段名传进去,做统一校验和修改。
    southsala
        3
    southsala  
       2018-01-06 14:27:45 +08:00
    如果不怕费工夫最好后端限制,而且不光是 int,其他字符串也要用正则限制好
    lihongjie0209
        4
    lihongjie0209  
       2018-01-06 14:37:20 +08:00
    你难道在 Controller 中直接 Request.getParam()???? 不应该是用 DTO 接受参数吗? 一般的框架都有参数绑定异常的处理方式, 不需要自己手写.

    如果你想一劳永逸的话, 写一个 Filter 吧, 在入口函数处理之前都要经过 Filter 的
    WatcherHangzhou
        5
    WatcherHangzhou  
    OP
       2018-01-06 14:42:49 +08:00
    @lihongjie0209

    有 request.getInt("XX") 获取 int 值, 我在考虑重新注入个新的 request 重写这个 getInt 方法,判断参数 XX 是不是要限制最大值的那几个字段
    lihongjie0209
        6
    lihongjie0209  
       2018-01-06 15:01:32 +08:00
    @WatcherHangzhou #5 这不是个好习惯, 后面想要重构就会遇到你现在的问题.
    bxb100
        7
    bxb100  
       2018-01-06 15:29:02 +08:00
    可以试试 xwork-validator, hibernate validate
    cxbig
        8
    cxbig  
       2018-01-06 15:33:27 +08:00
    一般用户接口,我们都是前后端都验证的。
    前端可以规范一般用户输入,对于恶意的 POST,后端会再次验证 token 和 data。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5181 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 01:18 PVG 09:18 LAX 17:18 JFK 20:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86