前言

参数如何校验?撸主很久很久之前的项目都是在前端页面一个个 if else 的,后来就用了一系列的前端校验框架,比如 layui iview 等等,几个样式属性就可以轻松搞定,的确是美滋滋。

后端验证

那么问题来了?前端已经验证了,后端还有必要验证吗?

如果非要有个结果,答案只能是不安全的。虽然客户端自己对自己已经做了验证,但是你不能避免一些恶意用户人为的修改表单直接发送欺骗请求。

所以说,从安全的角度来说,单纯的依靠前端验证,是不安全的,任何健壮的系统都必须在后端进行验证。

当然,你也不必担心后台再写一坨if else,这里推荐大家一款参数校验神器 Hibernate-ValidatorSpringBoot的标配JPA是自带的,小伙伴们直接使用即可。

注解

基本提供了常用的校验注解,如果不满足业务,可以通过@Pattern自行定义正则表达式。

@Null  被注释的元素必须为null
@NotNull  被注释的元素不能为null
@AssertTrue  被注释的元素必须为true
@AssertFalse  被注释的元素必须为false
@Min(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min)  被注释的元素的大小必须在指定的范围内。
@Digits(integer,fraction)  被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past  被注释的元素必须是一个过去的日期
@Future  被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式。
@Email 被注释的元素必须是电子邮件地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty  被注释的字符串必须非空
@Range  被注释的元素必须在合适的范围内

案例

这里以用户注册为例:

@Data
@Entity
@Table(name = "sys_user")
public class SysUser implements Serializable{/*** 用户id */ @Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "user_id", nullable = false, length = 20)private Long userId;/*** 用户名 */@NotNull@Column(name = "username", nullable = false, length = 50)private String username;/*** 密码 */@Size(min = 6, max = 25, message = "密码长度要求6到25之间")@Column(name = "password", nullable = false, length = 50)private String password;/*** 姓名(昵称) */ @NotNull@Column(name = "nickname", length = 50)private String nickname;/*** 邮箱 */@Email(message="邮箱格式不正确")@Column(name = "email", length = 100)private String email;/*** 手机号 */@Pattern(regexp="^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))d{8}$",message="手机格式不正确")@Column(name = "mobile", length = 100)private String mobile;/*** 状态 0:禁用,1:正常 */ @Column(name = "status", length = 4)private Short status;/*** 备注 */ @Column(name = "remark", length = 500)private String remark;/*** 创建用户id */ @Column(name = "user_id_create")private Long userIdCreate;/*** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")@Column(name = "gmt_create")private Timestamp gmtCreate;/*** 修改时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")@Column(name = "gmt_modified")private Timestamp gmtModified;
}

小结

是不是很爽,再也不用 if else 了,当然后台还没校验的另说!最后还是建议各位小伙伴,把安全校验做充分,省的以后前后端扯皮,最重要的是避免背锅!!!

http://weixin.qq.com/r/IUwFHVfE1AqrrRN_9xkz (二维码自动识别)

springboot 优雅的参数校验_SpringBoot 2.x 开发案例之优雅的校验参数相关推荐

  1. fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...

    原作者:小柒 地址:https://blog.52itstyle.vip/archives/4837/ 前言 最近在做一款图床服务,前面的文章也有提到,之前整合了阿里云 OSS 做图片存储,虽然小批量 ...

  2. java护照号码校验_SpringBoot如何优雅的校验参数

    博客地址 :https://lqcoder.com 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 ...

  3. @valid 校验_SpringBoot数据校验与优雅处理详解

    本篇要点 JDK1.8.SpringBoot2.3.4release 说明后端参数校验的必要性. 介绍如何使用validator进行参数校验. 介绍@Valid和@Validated的区别. 介绍如何 ...

  4. element form自定义校验_SpringBoot分组校验及自定义校验注解

    前言   在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...

  5. SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!

    作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...

  6. aop+注解 实现对实体类的字段校验_SpringBoot2.0实战(6)整合hibernate-validator进行参数校验...

    spring-boot-starter-web 项目中默认已经集成了 hibernate-validator 相关知识 @AssertTrue // 用于 boolean 字段,该字段只能为 true ...

  7. @valid 校验_一文带你快速入手 Spring Boot 参数校验

    点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...

  8. 拼接符 防注入正则校验_SpringBoot 开发秘籍 启动时配置校验

    概述 在项目开发过程中,某个功能需要依赖在配置文件中配置的参数.这时候就可能出现下面这种现象问题: 有时候经常出现项目启动了,等到使用某个功能组件的时候出现异常,提示参数未配置或者bean注入失败. ...

  9. SpringBoot的jar传递参数时,使用两个「--」横线来标记参数

    目录 ■前言 ■Spring参数的分类 option 参数 非 option 参数 ■SpringBoot源代码分析:SimpleCommandLineArgsParser ■调用顺序 1.Sprin ...

最新文章

  1. 爬一爬 iPhone 11为何嘴上说真丑,销量却真香?
  2. ECCV20| 3D目标检测时序融合网络
  3. iOS pods更新失败
  4. 深入剖析分布式监控 CAT —— 消息文件存储
  5. Apache服务器上部署的网站乱码问题的解决办法
  6. windows 下安装Simplejson方法
  7. html设置了标签但是定义不了,在HTML标签管理器中设置不带元素ID的HTML中的事件...
  8. Android8.0适配之一应用图标适配
  9. javascript中的array对象属性及方法
  10. nginx负载均衡算法
  11. pandas根据现有列新添加一列
  12. paip.SVN无法提交--提示冲突的解决
  13. Compiz Check测试Linux桌面3D兼容性
  14. Java项目开发规范参考
  15. 电源管理允许此设备唤醒计算机怎么关掉,允许计算机关闭此设备以节省电量灰色 | MOS86...
  16. css设置文字外发光
  17. WPF真入门教程21--WPF资源系统
  18. 打开chm 打不开chm 解决 方案 方法
  19. 杨辉三角c语言程序for循环,如何用C语言循环输出杨辉三角?
  20. 20210409因为内存条的兼容问题引起的编译aosp10莫名的异常

热门文章

  1. android 定时语音,android 定时语音天气播报
  2. 在ECS实例的centos系统中安装Hadoop
  3. jfinal使用render之后还会继续往下执行代码吗
  4. 性能测试——美团国内机票网站(Badboy、JMeter)
  5. web.py——运行错误【AttributeError: ‘StaticApp‘ object has no attribute ‘directory‘】
  6. BugKuCTF WEB 网站被黑
  7. 用spring security设置用户jwt令牌和设置接口访问权限案例
  8. Redhat 停止sendmail的方法
  9. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】
  10. Fragment的setUserVisibleHint方法实现延时加载