JSR-303

ゝ一纸荒年。 2024-04-03 12:00 200阅读 0赞

请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面:

  • 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见于需要同时开发前后端的时候,虽然程序的正常使用不会有问题,但是开发者忽略了非正常操作。比如绕过前端程序,直接模拟客户端请求,这时候就会突然在前端预设的各种限制,直击各种数据访问接口,使得我们的系统存在安全隐患。
  • 大量地使用if/else语句嵌套实现,校验逻辑晦涩难通,不利于长期维护。

所以,针对上面的问题,建议服务端开发在实现接口的时候,对于请求参数必须要有服务端校验以保障数据安全与稳定的系统运行。同时,对于参数的校验实现需要足够优雅,要满足逻辑易读、易维护的基本特点。

JSR-303

Bean Validation中内置的constraint

9d9be966ddcb472393d337184e832b4c.jpeg

Hibernate Validator附加的constraint

6bd9e874f77a4c6b9001fc698e5d6272.jpeg

1、校验的字段上添加上@NotNull注解

表字段与实体类对应关系加@Column注解,请求参数通过实体类接收并校验参数,数据库返回数据通过实体类接受并匹配字段

  1. @Data
  2. @ApiModel(description="用户实体")
  3. public class User {
  4. @ApiModelProperty("用户编号")
  5. private Long id;
  6. @NotNull
  7. @Size(min = 2, max = 5)
  8. @ApiModelProperty("用户姓名")
  9. @Column(name="NAME") //数据库表字段与实体类对应关系
  10. private String name;
  11. @NotNull
  12. @Max(100)
  13. @Min(10)
  14. @ApiModelProperty("用户年龄")
  15. private Integer age;
  16. @NotNull
  17. @Email
  18. @ApiModelProperty("用户邮箱")
  19. private String email;
  20. }

2、校验的参数实体前添加@Valid注解

返回前端数据封装到Result中,data、code、msg,统一规范,代码清晰,方便联调

  1. @PostMapping("/")
  2. @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")
  3. public Result postUser(@Valid @RequestBody User user) {
  4. users.put(user.getId(), user);
  5. return ResultVo.sucess(suers);
  6. }

发表评论

表情:
评论列表 (有 0 条评论,200人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JSR-303

    请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见

    相关 JSR303

    JSR303 作用 大概步骤 因为以后要处理的异常很多,所以做一个统一的异常处理:@ControllerAdvice 作用 往往我们会在前端进行

    相关 JSR303校验

    > 前端校验是一种防君子不防小人的校验方式,其一般是通过修改提交按钮样式属性来禁止其提交数据,因此,安全性还不够,故而,我们一般还要采用后端校验的方式。 > 我们可以通过在

    相关 JSR303使用

    验证方式 用户在前端页面上填写表单时,前端js程序会校验参数的合法性 当数据到了后端,为了防止恶意操作,保持程序的健壮性 后端同样需要对数据进行校验 JSR30