在前台表单验证的时候,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,那么这样是否是安全的呢,答案是否定的。因为也可以通过模拟前台请求等工具来直接提交到后台,比如postman这样的工具,那么遇到这样的问题怎么办呢,我们可以在后台也做相应的校验。
新建项目,因为本文会使用postman模拟前端请求,所以本文需要加入web依赖,pom文件如下:
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.dalaoyang</groupId> 7 <artifactId>springboot_validator</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>springboot_validator</name> 12 <description>springboot_validator</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>1.5.9.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 </properties> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-devtools</artifactId> 36 <scope>runtime</scope> 37 </dependency> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-starter-test</artifactId> 41 <scope>test</scope> 42 </dependency> 43 </dependencies> 44 45 <build> 46 <plugins> 47 <plugin> 48 <groupId>org.springframework.boot</groupId> 49 <artifactId>spring-boot-maven-plugin</artifactId> 50 </plugin> 51 </plugins> 52 </build> 53 54 55</project>
创建一个demo类,说一下本文使用demo中校验使用的注解:
@NotEmpty:非空
@Length:长度,最长或者最短
@Email:校验email
@Pattern:使用正则校验,本文使用的是身份证的正则
,代码如下:
1package com.dalaoyang.entity; 2 3import org.hibernate.validator.constraints.Email; 4import org.hibernate.validator.constraints.Length; 5import org.hibernate.validator.constraints.NotEmpty; 6 7import javax.validation.constraints.Pattern; 8import java.io.Serializable; 9 10/** 11 * @author dalaoyang 12 * @Description 13 * @project springboot_learn 14 * @package com.dalaoyang.entity 15 * @email yangyang@dalaoyang.cn 16 * @date 2018/5/1 17 */ 18public class Demo implements Serializable { 19 20 @NotEmpty(message="用户名不能为空") 21 @Length(min=6,max = 12,message="用户名长度必须位于6到12之间") 22 private String userName; 23 24 25 @NotEmpty(message="密码不能为空") 26 @Length(min=6,message="密码长度不能小于6位") 27 private String passWord; 28 29 @Email(message="请输入正确的邮箱") 30 private String email; 31 32 @Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份证格式错误") 33 private String idCard; 34 35 public String getUserName() { 36 return userName; 37 } 38 39 public void setUserName(String userName) { 40 this.userName = userName; 41 } 42 43 public String getPassWord() { 44 return passWord; 45 } 46 47 public void setPassWord(String passWord) { 48 this.passWord = passWord; 49 } 50 51 public String getEmail() { 52 return email; 53 } 54 55 public void setEmail(String email) { 56 this.email = email; 57 } 58 59 public String getIdCard() { 60 return idCard; 61 } 62 63 public void setIdCard(String idCard) { 64 this.idCard = idCard; 65 } 66 67}
创建一个TestDemoController,来测试本文的校验,代码如下:
1package com.dalaoyang.controller; 2 3import com.dalaoyang.entity.Demo; 4import org.springframework.validation.BindingResult; 5import org.springframework.validation.ObjectError; 6import org.springframework.web.bind.annotation.PostMapping; 7import org.springframework.web.bind.annotation.RestController; 8 9import javax.validation.Valid; 10import java.util.List; 11 12/** 13 * @author dalaoyang 14 * @Description 15 * @project springboot_learn 16 * @package com.dalaoyang.controller 17 * @email yangyang@dalaoyang.cn 18 * @date 2018/5/1 19 */ 20@RestController 21public class TestDemoController { 22 23 @PostMapping("/") 24 public String testDemo(@Valid Demo demo,BindingResult bindingResult){ 25 StringBuffer stringBuffer = new StringBuffer(); 26 if(bindingResult.hasErrors()){ 27 List<ObjectError> list =bindingResult.getAllErrors(); 28 for (ObjectError objectError:list) { 29 stringBuffer.append(objectError.getDefaultMessage()); 30 stringBuffer.append("---"); 31 } 32 } 33 return stringBuffer!=null?stringBuffer.toString():""; 34 } 35}
启动项目使用postman分别做了三次请求,第一次所有属性都是随便填写的,如图

第二次输入正确的身份证和邮箱,用户名和密码为空,如图

第三次全部输入正确,如图

本文只是使用的简单的几种校验,Hibernate-validator还有很多种校验的方法,大家可以参考这篇文章https://blog.csdn.net/xgblog/article/details/52548659
源码下载 :大老杨码云