返回

参数校验@Validated & @Valid 值得拥有,让数据远离恶作剧!

后端

为何参数校验至关重要:守护你的后端安全堡垒

背景介绍

在现代化的应用程序开发中,前端校验已不再可靠。外部用户可以通过接口直接调用你的服务,尽管添加了令牌校验,但有心之人仍能钻空子,传递各种错误参数。倘若后端不加以校验,极有可能导致数据库数据错乱,特别是涉及金额的数据,甚至可能使公司遭受巨大损失。

Spring Boot 的参数校验利器

Spring Boot 提供了两款强大的参数校验注解:

  • @Validated :标记需要进行参数校验的类或方法。
  • @Valid :标记需要进行参数校验的参数。

通常,这两个注解会联袂使用,例如:

@PostMapping("/user")
public User createUser(@RequestBody @Validated User user) {
    // ...
}

在此代码片段中,@Validated 注解表明 createUser 方法需要进行参数校验,@Valid 注解则表明 user 参数需要进行参数校验。

参数校验规则

Spring Boot 支持多种参数校验规则,涵盖了各种常见场景:

  • 非空校验 :确保参数不为空。
  • 长度校验 :确保参数长度符合指定范围。
  • 范围校验 :确保参数值落在指定范围内。
  • 正则表达式校验 :确保参数值符合指定的正则表达式。
  • 自定义校验 :可使用 @Pattern@Min@Max 等注解定义自定义校验规则。

如何使用参数校验注解?

在 Spring Boot 中使用参数校验注解只需几个简单步骤:

  1. 在需要校验参数的类或方法上添加 @Validated 注解。
  2. 在需要校验的参数上添加 @Valid 注解。
  3. 定义参数校验规则,可使用 @Pattern@Min@Max 等注解定义自定义校验规则。
  4. 在 Spring Boot 应用中启用参数校验,可在 application.yml 文件中添加如下配置:
spring:
  mvc:
    valid: true

参数校验最佳实践

为了确保参数校验的有效性,遵循以下最佳实践至关重要:

  • 在所有需要校验参数的类或方法上添加 @Validated 注解。
  • 在所有需要校验的参数上添加 @Valid 注解。
  • 使用 @Pattern@Min@Max 等注解定义自定义校验规则。
  • 在 Spring Boot 应用中启用参数校验。
  • 在参数校验失败时返回友好的错误信息。
  • 使用日志记录详细记录参数校验失败的信息。

总结

参数校验是 Spring Boot 中一项不可或缺的功能,它能助力你构建更加健壮可靠的应用程序。通过恰当使用 @Validated@Valid 注解,你能轻松实现参数校验,规避应用程序异常或崩溃的风险,为你的后端安全保驾护航。

常见问题解答

  1. 为什么前端校验不可靠?

    • 任何人都能绕过前端校验直接调用后端接口,传递非法参数。
  2. 参数校验的优势有哪些?

    • 防止数据库数据错乱,保障系统安全。
    • 及早发现参数错误,避免后端代码异常。
    • 提高代码可读性和可维护性。
  3. 如何启用 Spring Boot 的参数校验?

    • application.yml 文件中添加 spring.mvc.valid: true 配置。
  4. 除了 Spring Boot 提供的注解,还有其他参数校验方法吗?

    • 可以使用第三方校验库,如 JSR-303、Hibernate Validator 等。
  5. 自定义校验规则的原则是什么?

    • 编写清晰、简洁、易于理解的校验规则。
    • 考虑使用正则表达式来定义复杂的校验规则。
    • 保证自定义校验规则与业务逻辑相符。