在前臺表單驗證的時候,通常會校驗一些資料的可行性,比如是否為空,長度,身份證,郵箱等等,那麼這樣是否是安全的呢,答案是否定的。因為也可以通過模擬前臺請求等工具來直接提交到後臺,比如postman這樣的工具,那麼遇到這樣的問題怎麼辦呢,我們可以在後臺也做相應的校驗。
新建專案,因為本文會使用postman模擬前端請求,所以本文需要加入web依賴,pom檔案如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalaoyang</groupId>
<artifactId>springboot_validator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot_validator</name>
<description>springboot_validator</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
複製程式碼
建立一個demo類,說一下本文使用demo中校驗使用的註解:
@NotEmpty:非空
@Length:長度,最長或者最短
@Email:校驗email
@Pattern:使用正則校驗,本文使用的是身份證的正則
,程式碼如下:
package com.dalaoyang.entity;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
/**
* @author dalaoyang
* @Description
* @project springboot_learn
* @package com.dalaoyang.entity
* @email yangyang@dalaoyang.cn
* @date 2018/5/1
*/
public class Demo implements Serializable {
@NotEmpty(message="使用者名稱不能為空")
@Length(min=6,max = 12,message="使用者名稱長度必須位於6到12之間")
private String userName;
@NotEmpty(message="密碼不能為空")
@Length(min=6,message="密碼長度不能小於6位")
private String passWord;
@Email(message="請輸入正確的郵箱")
private String email;
@Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份證格式錯誤")
private String idCard;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
}
複製程式碼
建立一個TestDemoController,來測試本文的校驗,程式碼如下:
package com.dalaoyang.controller;
import com.dalaoyang.entity.Demo;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
* @author dalaoyang
* @Description
* @project springboot_learn
* @package com.dalaoyang.controller
* @email yangyang@dalaoyang.cn
* @date 2018/5/1
*/
@RestController
public class TestDemoController {
@PostMapping("/")
public String testDemo(@Valid Demo demo,BindingResult bindingResult){
StringBuffer stringBuffer = new StringBuffer();
if(bindingResult.hasErrors()){
List<ObjectError> list =bindingResult.getAllErrors();
for (ObjectError objectError:list) {
stringBuffer.append(objectError.getDefaultMessage());
stringBuffer.append("---");
}
}
return stringBuffer!=null?stringBuffer.toString():"";
}
}
複製程式碼
啟動專案使用postman分別做了三次請求,第一次所有屬性都是隨便填寫的,如圖
第二次輸入正確的身份證和郵箱,使用者名稱和密碼為空,如圖
第三次全部輸入正確,如圖
本文只是使用的簡單的幾種校驗,Hibernate-validator還有很多種校驗的方法,大家可以參考這篇文章blog.csdn.net/xgblog/arti…
原始碼下載 :大老楊碼雲
個人網站:www.dalaoyang.cn