雨燕权限管理后端技术总结

1,入参校检

  • 入参校检我觉得分两种,一种是validtion在前面就设置了他的格式和not null这种,鉴于我在dto使用vaild的时候被峰哥说了dto只能用了传输,那只能在web项目添加vaild,platform只部署内网的时候,dto暂时认为他是安全的
    
    
  • 还有一种就是不使用vaild校检,没有权限添加的字段在程序中set null,还有其他字段即使在前端控制了,有人可能用http工具进行攻击,所以存在乱七八糟的设值情况,所以要在关键字段set null,然后由数据库添加默认值,(注意string和int,和timestamp都有

  默认值),date要在程序中处理,在有权限的token的情况下,它可以设置任何值,毕竟他是有权限的

  • 最新情报,框架不能使用@Valid注解,在专用dto上可以应付必不须值注入的情况,但不能保证全体dto都有值,所以dto是必须有的字段要自己做出null检查,dto上非必须的自己想好
  • 在复用dto上,多余出来的字段,如果是必不需要的,自己要做set null操作

2,整个流程,在web的biz层发生form和dto的方法,dto想转成能看到格式,比如base64,就在这里,在platform的biz层发生dto和entity的转换方法,数据库要存进相关int,dto的enum转成int,空日期设置,在这里进行

3,文件目录结构

 4,评审后的感悟+后来测试(不能使用@valid jsr 303验证

  • form对象需要setter 和 getter方法(可以使用Lombok
  • dto对象需要无参构造函数(可以使用Lombok
  • 有异常直接抛throw new BizException("0","test0"),如果platform有提交异常,throw new BizException("1","test1"),会提前抛出platform的异常

5,额外表

  • 添加额外表的东西的时候,不要根据前端是否传来额外表的主键来判断插入或者更新,要传入唯一的主表id,在数据库查询是否有记录来判断插入还是更新

6,代码写法

  • 在一个if都有差不多的相同条件,想想可否抽象出来,可否使用continue来提前跳过
  • 尽量 不用flag来判断,有的东西写两次就两次
  • 在查询数据库时,想想查出来的对象是否能复用,比如要根据id查出来一个,或者他就是创始人的id,就不用重查一遍
  • 在判空list的时候,不清楚时候返回一个空list还是null,都尽量做一次 != null 判断和 is.empty方法判断
  • 在用if来返回值的时候,把代码量少的放在if里面
原文地址:https://www.cnblogs.com/vhyc/p/10570669.html