javascript
springboot 优雅的参数校验_SpringBoot 2.x 开发案例之优雅的校验参数
前言
參數(shù)如何校驗?擼主很久很久之前的項目都是在前端頁面一個個 if else 的,后來就用了一系列的前端校驗框架,比如 layui iview 等等,幾個樣式屬性就可以輕松搞定,的確是美滋滋。
后端驗證
那么問題來了?前端已經(jīng)驗證了,后端還有必要驗證嗎?
如果非要有個結(jié)果,答案只能是不安全的。雖然客戶端自己對自己已經(jīng)做了驗證,但是你不能避免一些惡意用戶人為的修改表單直接發(fā)送欺騙請求。
所以說,從安全的角度來說,單純的依靠前端驗證,是不安全的,任何健壯的系統(tǒng)都必須在后端進行驗證。
當(dāng)然,你也不必?fù)?dān)心后臺再寫一坨if else,這里推薦大家一款參數(shù)校驗神器 Hibernate-Validator 。SpringBoot的標(biāo)配JPA是自帶的,小伙伴們直接使用即可。
注解
基本提供了常用的校驗注解,如果不滿足業(yè)務(wù),可以通過@Pattern自行定義正則表達式。
@Null 被注釋的元素必須為null @NotNull 被注釋的元素不能為null @AssertTrue 被注釋的元素必須為true @AssertFalse 被注釋的元素必須為false @Min(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值 @Max(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值 @DecimalMin(value) 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值 @DecimalMax(value) 被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值 @Size(max,min) 被注釋的元素的大小必須在指定的范圍內(nèi)。 @Digits(integer,fraction) 被注釋的元素必須是一個數(shù)字,其值必須在可接受的范圍內(nèi) @Past 被注釋的元素必須是一個過去的日期 @Future 被注釋的元素必須是一個將來的日期 @Pattern(value) 被注釋的元素必須符合指定的正則表達式。 @Email 被注釋的元素必須是電子郵件地址 @Length 被注釋的字符串的大小必須在指定的范圍內(nèi) @NotEmpty 被注釋的字符串必須非空 @Range 被注釋的元素必須在合適的范圍內(nèi)案例
這里以用戶注冊為例:
@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;/*** 狀態(tài) 0:禁用,1:正常 */ @Column(name = "status", length = 4)private Short status;/*** 備注 */ @Column(name = "remark", length = 500)private String remark;/*** 創(chuàng)建用戶id */ @Column(name = "user_id_create")private Long userIdCreate;/*** 創(chuàng)建時間 */@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; }小結(jié)
是不是很爽,再也不用 if else 了,當(dāng)然后臺還沒校驗的另說!最后還是建議各位小伙伴,把安全校驗做充分,省的以后前后端扯皮,最重要的是避免背鍋!!!
http://weixin.qq.com/r/IUwFHVfE1AqrrRN_9xkz (二維碼自動識別)
總結(jié)
以上是生活随笔為你收集整理的springboot 优雅的参数校验_SpringBoot 2.x 开发案例之优雅的校验参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .jar中没有主清单属性_如何在spri
- 下一篇: python递归汉诺塔详解_汉诺塔在py