继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringBoot 2.x 开发案例之优雅的校验参数

小柒2012
关注TA
已关注
手记 103
粉丝 1.7万
获赞 2435

前言

参数如何校验?撸主很久很久之前的项目都是在前端页面一个个 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了,当然后台还没校验的另说!最后还是建议各位小伙伴,把安全校验做充分,省的以后前后端扯皮,最重要的是避免背锅!!!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP