zoukankan      html  css  js  c++  java
  • 数据验证

    用户输入一般书 随意的,为了保证数据的合法性,数据校验时所有web应用都必须处理的问题。

    在spring MVC中有两种方法

    1、利用spring自带的验证控件

    2、JSR303

    1、数据验证概述

    数据验证分为客户端验证和服务的验证,客户端验证主要时过滤正常用户的误操作,

    通过javascript代码完成;服务器端验证是整个应用阻止非法数据的最后防线。

    1、客户端验证

     在大多数情况下,使用JavaScript进行客户端验证步骤如下:

    (1)、编写验证函数

    (2)、在提交表单的事件中调用验证函数

    (3)、根据验证函数来判断是否进行表单提交

    客户端验证可以过滤用户误操作,是第一道防线,一般使用JavaScript

    但是仅有客户端的验证时不够的,攻击者还可以通过绕过客户端直接进行非法输入

    这可能会引起系统的异常,为了确保数据的合法性,必须要加上服务器端的检验

     2、服务器端验证

     Spring MVC的Converter和Formatter在进行类型转换时是将输入数据转换成领域对象的属性值(一种Java类型),

    一旦成功,服务器端验证就会介入,也就是说,在spring MVC控件中先进行数据类型转换,在进行服务器端验证。

    服务器端验证对于系统的安全性、完整性、健壮性起到了至关重要的作用。

    本次测试介绍的是JSR303验证!!!

    2、JSR303验证

     对于JSR303验证,目前有两个实现,一个是Hibernate Validator,一个是Apache BVal

    本次采用的是前者,只是做数据验证的功能

    ①、需要使用到的jar

     

    ②、验证测试

    只是做最简单的测试展示

     前端页面设计:

    user.jsp

    <body>
        <c:forEach items="${errors}" var="e">
            <p style="color: red">${e.defaultMessage}</p>
        </c:forEach>
        <br>
        <form action="<%=request.getContextPath()%>/user" method="post">
            用户民:<input type="text" name="name"><br>
            密码:<input type="password" name="pwd"><br>
            <input type="submit" value="submit">
        </form>
    </body>

     users.jsp

    <body>
    登陆成功!!
    </body>

    userController.java

    package controller;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.annotation.RequestMapping;
    import pojo.User;
    import javax.validation.Valid;
    import java.util.List;
    @Controller
    public class userController {
        @RequestMapping("/touser")
        public String toUser(){
            return "user";
        }
        @RequestMapping("/user")
        public String  user(@Valid User user, BindingResult result, Model model){
    
            System.out.println(user);
            List<ObjectError> error = result.getAllErrors();
            if (error.size() > 0){
                model.addAttribute("errors",error);
                return "user";
            }
            return "users";
        }
    }

     注意:BindingResult必须紧随@Valid注解

    测试基本的测试已经配置完成!!!

    还需要对配置文件进行注册:

    dispatcher-servlet.xml

        <!--数据检验-->
        <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"></bean>

     测试任务:

    此时可以看出后台会对数据进行判断是否允许登陆!!!

     ③、标注类型

     1、空检查

    @Null:验证 对象是否位null

    @NotNull:验证对象是否部位null,无法检验长度为0的字符串

    @NotBlank:检查约束字符串是不是null,以及被trim后的长度是否大于0

          只针对字符串,且会去掉前后空格

    @NotEmpty:检查约束元素是否为null或者是empty

    2、boolean检查

    @AssertTrue:验证boolean属性是否为true

    @AssertFalse:验证Boolean属性是否为false

    3、长度检查

    @Size(min=,max=):验证对象(Array、Colleaction、Map、String)长度

               是否在给定的范围之内

    @Length(min=,max=):验证字符串的长度是否再指定的范围之内

    4、日期检查

    @Past:验证Date和Calendar对象是否再当前时间之前

    @Future:验证Date和Calendar对象是否再当前时间之后

    @Pattern:验证String对象是否符合正则表达式的规则

    5、数值检查

    @Min:验证Number和String对象是否大于指定的值

    @Max:验证Number和String对象是否小于指定的值

     @DecimalMax:被标注的值必须不大于约束中指定的最大值,这个约束的参数是一

            个通过BigDecimal定义的最大值字符串表示,小数存在精度。

    @DecimalMin:被标注的值必须不小于约束中指定的最大值,这个约束的参数是一

            个通过BigDecimal定义的最小值字符串表示,小数存在精度。

     @Digits:验证Number和String的构成是否合法

    @Digits(integer=,fraction=):验证字符串是否符合指定格式的数字,integer指定

            整数精度,fraction指定小数精度

    @Range(min=,max=):检查数字是否介于min和max之间

    @Valid:对关联对象进行校验,如果关联对象是个集合或者数组,那么对其中到的元素进行校验

        如果是一个map。则对其中的值部分进行校验

    @Email:验证是否为邮件地址,如果为null,不进行验证,通过验证

    数据校验基于Spring验证器可以百度查看相关的代码,这里不在陈述!!!!

  • 相关阅读:
    四级英语day9
    123
    像程序员一样思考
    Kali
    OS X
    Effective Java
    DHU ACM OJ
    Ambari
    Hadoop
    Hadoop2
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10247746.html
Copyright © 2011-2022 走看看