使用spring-boot-starter-validation校验用户输入的内容-后端校验

使用spring-boot-starter-validation进行后端校验

场景:

用户在注册时输入用户名和密码,实现对密码的强度校验,要求: 数字、字母、大小写、特殊符号至少包含3个

springboot引入依赖

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

创建一个自定义注解接口

package com.javakc.platform.components.validation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * validation - 自定义的写到实体类中 - 在保存实体类时加注解校验 密码强度
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)  //程序运行的时候来进行校验 注解接口需要实现类
@Constraint(validatedBy = PasswordValidator.class) //spring-boot-starter-validation中的指定注解实现类 --- 密码强度校验来这 - 找实现类
//注解指定自定义注解中的子注解list-中的value属性
@Repeatable(value = Password.List.class)
public @interface Password {
    //直接使用的属性 在括号里
    String message() default "";

    Class<?>[] groups() default {};

    //Payload是spring-boot-starter-validation中的
    Class<? extends Payload>[] payload() default {};

    //Password注解中通过指定一个子注解来 声明里面的一个类似属性的东西 --- value是你输入的密码
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)  //程序运行的时候来进行校验
    @interface List{
        Password[] value();
    }
}

创建@Constraint指定的实现类PasswordValidator

import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * @author ypc
 * @desc 自定义密码注解的实现类 -- 基于spring-boot-starter-validation  实现接口  在用户输入的密码校验那里 强度的校验
 * @date
 */
public class PasswordValidator implements ConstraintValidator<Password,String> {

    //数字
    public static final String NUMBER = ".*\\d+.*";
    //小写字母
    public static final String UPPERCASE = ".*[A-Z]+.*";
    //大写字母
    public static final String LOWERCASE = ".*[a-z]+.*";
    //特殊符号
    public static final String SYMBOL = ".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*";

    /**
     * 重写校验方法 -- value是密码
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //如果字符串里面的值为null, "", "   ",那么返回值为false;否则为true   str是空的话 就返回false
        if (StringUtils.hasText(value)) {
            int count = 0;
            if (value.matches(PasswordValidator.NUMBER)) count++;
            if (value.matches(PasswordValidator.LOWERCASE)) count++;
            if (value.matches(PasswordValidator.UPPERCASE)) count++;
            if (value.matches(PasswordValidator.SYMBOL)) count++;
            return count > 2;   //count大于2 就返回
        }
        return false;  //密码为空的话 返回false
    }
}

使用 在controller添加注解@Valid 开启校验

保存密码等信息时 就会后台校验密码的强度是否符合要求

@PostMapping
    @ApiOperation("用户注册修改")
    @LoggerOperation(module = "系统-用户", message = "用户注册修改", type = LoggerEnumerate.INSERT_UPDATE)
    public void save(@RequestBody @Valid SystemUser entity)
    {
       systemUserService.saveUpdate(entity);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值