springboot 优雅的参数校验_SpringBoot 2.x 开发案例之优雅的校验参数
前言
参数如何校验?撸主很久很久之前的项目都是在前端页面一个个 if else
的,后来就用了一系列的前端校验框架,比如 layui
iview
等等,几个样式属性就可以轻松搞定,的确是美滋滋。
后端验证
那么问题来了?前端已经验证了,后端还有必要验证吗?
如果非要有个结果,答案只能是不安全的。虽然客户端自己对自己已经做了验证,但是你不能避免一些恶意用户人为的修改表单直接发送欺骗请求。
所以说,从安全的角度来说,单纯的依靠前端验证,是不安全的,任何健壮的系统都必须在后端进行验证。
当然,你也不必担心后台再写一坨if else
,这里推荐大家一款参数校验神器 Hibernate-Validator
。SpringBoot
的标配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 开发案例之优雅的校验参数相关推荐
- fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...
原作者:小柒 地址:https://blog.52itstyle.vip/archives/4837/ 前言 最近在做一款图床服务,前面的文章也有提到,之前整合了阿里云 OSS 做图片存储,虽然小批量 ...
- java护照号码校验_SpringBoot如何优雅的校验参数
博客地址 :https://lqcoder.com 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 ...
- @valid 校验_SpringBoot数据校验与优雅处理详解
本篇要点 JDK1.8.SpringBoot2.3.4release 说明后端参数校验的必要性. 介绍如何使用validator进行参数校验. 介绍@Valid和@Validated的区别. 介绍如何 ...
- element form自定义校验_SpringBoot分组校验及自定义校验注解
前言 在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...
- SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!
作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...
- aop+注解 实现对实体类的字段校验_SpringBoot2.0实战(6)整合hibernate-validator进行参数校验...
spring-boot-starter-web 项目中默认已经集成了 hibernate-validator 相关知识 @AssertTrue // 用于 boolean 字段,该字段只能为 true ...
- @valid 校验_一文带你快速入手 Spring Boot 参数校验
点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 作者:狂乱的贵公子 来源: ...
- 拼接符 防注入正则校验_SpringBoot 开发秘籍 启动时配置校验
概述 在项目开发过程中,某个功能需要依赖在配置文件中配置的参数.这时候就可能出现下面这种现象问题: 有时候经常出现项目启动了,等到使用某个功能组件的时候出现异常,提示参数未配置或者bean注入失败. ...
- SpringBoot的jar传递参数时,使用两个「--」横线来标记参数
目录 ■前言 ■Spring参数的分类 option 参数 非 option 参数 ■SpringBoot源代码分析:SimpleCommandLineArgsParser ■调用顺序 1.Sprin ...
最新文章
- 爬一爬 iPhone 11为何嘴上说真丑,销量却真香?
- ECCV20| 3D目标检测时序融合网络
- iOS pods更新失败
- 深入剖析分布式监控 CAT —— 消息文件存储
- Apache服务器上部署的网站乱码问题的解决办法
- windows 下安装Simplejson方法
- html设置了标签但是定义不了,在HTML标签管理器中设置不带元素ID的HTML中的事件...
- Android8.0适配之一应用图标适配
- javascript中的array对象属性及方法
- nginx负载均衡算法
- pandas根据现有列新添加一列
- paip.SVN无法提交--提示冲突的解决
- Compiz Check测试Linux桌面3D兼容性
- Java项目开发规范参考
- 电源管理允许此设备唤醒计算机怎么关掉,允许计算机关闭此设备以节省电量灰色 | MOS86...
- css设置文字外发光
- WPF真入门教程21--WPF资源系统
- 打开chm 打不开chm 解决 方案 方法
- 杨辉三角c语言程序for循环,如何用C语言循环输出杨辉三角?
- 20210409因为内存条的兼容问题引起的编译aosp10莫名的异常
热门文章
- android 定时语音,android 定时语音天气播报
- 在ECS实例的centos系统中安装Hadoop
- jfinal使用render之后还会继续往下执行代码吗
- 性能测试——美团国内机票网站(Badboy、JMeter)
- web.py——运行错误【AttributeError: ‘StaticApp‘ object has no attribute ‘directory‘】
- BugKuCTF WEB 网站被黑
- 用spring security设置用户jwt令牌和设置接口访问权限案例
- Redhat 停止sendmail的方法
- JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】
- Fragment的setUserVisibleHint方法实现延时加载