SpringBoot开发系列--校验依赖:validation

在实验业务时,特别是在登录时,可能需要验证前端传送过来的帐号密码是否符合要求:例如假如帐号是手机号,我们需要验证手机号是否合法(长度是否是11位,等等),此外,如果前端传送的是对象,在后端接收时需要验证重要字段是否符合要求。

为什么有些可以在前端可以验证的,后端还要验证?

后端可以说是最后一道防线,所以不管前端时候进行了验证,后端在数据入库之前都要进行验证,这是出于安全的考虑。

今年天的主角:validation

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

添加完注解之后,我们可以在controller参数接收时进行对象验证,下面举例说明

例如我们在logincontroller中定义了一个login方法:

public RespBean doLogin(LoginVo loginVo){
//        log.info("{}",loginVo);
        RespBean respBean = iUserService.doLogin(loginVo);
        return respBean;
    }

loginVo为vo类,接受前端传来的用户名和密码,传统上我们验证用户和密码是否有效应该在service蹭,即在iUserService里面进行验证:

		String mobile = loginVo.getMobile();
        String password = loginVo.getPassword();
        if (StringUtils.isEmpty(mobile)||StringUtils.isEmpty(password)){
            return RespBean.error(RespBeanEnum.LOGIN_ERROR);
        }
        if(!ValidatorUtil.isMobile(mobile)){
            return RespBean.error(RespBeanEnum.MOBILE_ERROR);
        }

验证逻辑大致如上,进行非空验证,还有这里用户名是手机号,那么我们还需要:“ValidatorUtil.isMobile(mobile)来验证是否符合手机号规则:1开头,等等,ValidatorUtil.isMobile()实现如下:

private static final Pattern mobile_pattern = Pattern.compile("[1][3-9][0-9]{9}$");
    public static boolean isMobile(String mobile){
        if (StringUtils.isEmpty(mobile)){
            return false;
        }
        Matcher matcher = mobile_pattern.matcher(mobile);
        return matcher.matches();
    }

经过这么复杂的定义才完成对输入参数的验证,现在我们导入validation依赖后,可以通过在controller方法中添加@Valid关键字进行检查

 public RespBean doLogin(@Valid LoginVo loginVo){
//        log.info("{}",loginVo);
        RespBean respBean = iUserService.doLogin(loginVo);
        return respBean;
    }

标注@Valid之后,便会对LoginVo对象进行检查,需要检查哪些,可以在LoginVo对象中进行配置:

@Data
public class LoginVo {
    @NotNull//非空
    @IsMobile//自定义注解,检查手机号位数和有效性
    private String mobile;
    @NotNull
    @Length(min = 32)//设置密码长度检验,最小32为(md5加密之后)
    private String password;
}

关于自定义模板下次介绍

上一篇:分布式互联网基建World Mobile,助力Cardano生态实现愿景


下一篇:学案12:电场强度和静电现象