來源:小柒2012
前言
參數如何校驗?撸主很久之前的項目都是在前端頁面一個個 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了,當然後台還沒校驗的另說。最後還是建議各位小夥伴,把安全校驗做充分,省的以後前後端扯皮,最重要的是避免背鍋!!!