栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MVC (四)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC (四)

数据验证

一、数据验证概述

1.1 客户端验证1.2 服务器端验证 二、Spring验证器

2.1 Validator接口2.2 ValidationUtils类2.3 代码演示

2.3.1 创建一个注册用户界面2.2.1 编写验证器类2.2.3 配置错误码错误信息2.2.4 在Spring MVC核心配置文件中配置消息属性文件2.2.5 创建注册请求2.2.6 验证 三、JSR 303 验证

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

一、数据验证概述

        数据验证分为客户端验证和服务器端验证,客户端验证主要是过滤正常用户的误操作,通过Javascript代码完成;服务器端验证是是整个应用阻止非法数据的最后防线,通过在应用程序编程实现。

1.1 客户端验证

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

    编写验证函数在提交表单的事件中调用验证函数。根据验证函数来判断是否进行表单提交

        客户端验证是可以过滤用户的误操作,是第一道防线,一般使用Javascript代码实现。但仅有客户端验证是不够的,攻击者还可以绕过客户端验证直接进行非法输入,这样可能会引起系统异常,为了确保数据的合法性,防止用户通过非正常手段提交错误信息,必须加上服务器端验证。

1.2 服务器端验证

        SpringMVC的Converter和Formatter在进行类型转换时是将输入数据转换成领域对象的属性值(一种Java类型),一旦成功,服务器端验证器就会介入。也就是说,在springMVC框架中先进行数据类型转换,再进行服务器端验证。
服务器端验证对于系统的安全性、完整性、健壮性起到了至关重要的作用。在SpringMVC框架中可以利用Spring自带的验证框架验证数据,也可以利用JSR 303 实现数据验证。

二、Spring验证器 2.1 Validator接口

创建自定义Spring验证器需要实现org.springframework.validation.Validator接口,该接口有两个方法

当supports方法返回true时,验证器可以处理指定的Class。validate 方法的功能是验证目标对象object,并将验证错误消息存入Errors对象。

往Errors对象存入错误消息的方法是reject 或 rejectValue:
一般在配置文件中配置好错误码,reject 或 rejectValue方法中传入错误码,Spring MVC框架就会在消息属性文件中查找错误码,获取相应错误消息。


user.password.isnull为错误码,对应属性文件中配置错误信息

2.2 ValidationUtils类

org.springframework.validation.ValidationUtils类是一个工具类,类中有帮助用户判断值是否为空的方法。


在给Errors对象存入错误消息:

//errors为错误对象实例,password表示需要判断是否为空的字段,user.password.isnul为错误码
ValidationUtils.rejectIfEmpty(errors,"password","user.password.isnull");
2.3 代码演示 2.3.1 创建一个注册用户界面

需要使用JSTL 表单标签显示错误信息。

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/2/16
  Time: 17:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    注册界面



    

注册界面

用户名: 密码:
<%--取出password字段错误信息--%>
2.2.1 编写验证器类
@Component
public class UserValidator implements Validator {
    @Override
    public boolean supports(Class aClass) {
        //要验证的model,返回值为false则不验证,isAssignableFrom:判断是否为某个类的父类
        return User.class.isAssignableFrom(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        //o 要验证的对象
        //ValidationUtils方式
        ValidationUtils.rejectIfEmpty(errors,"name","user.name.isnull");

        //errors.rejectValue
        User user = (User) o;
        if (user.getPassword() == null || user.getPassword().isEmpty()) {
            errors.rejectValue("password","user.password.isnull");
        }
    }
}
2.2.3 配置错误码错误信息

创建errorMessages.properties文件,在文件中配置错误信息

user.name.isnull=name is null 
user.password.isnull=password is null 
2.2.4 在Spring MVC核心配置文件中配置消息属性文件
 
    
        
    
2.2.5 创建注册请求
 @RequestMapping(value = "/toRegister1")
    public String toMainForwardAndRedirect(User user, Model model, BindingResult result) {
        //添加验证
        this.userValidator.validate(user, result);

        if (result.hasErrors()) {
            //有错误
            logger.info("注册失败");
            return "register";
        }else {
            model.addAttribute("user", user);
            logger.info("注册成功");
            //注册成功到登录界面
            return "login";
        }
2.2.6 验证

三、JSR 303 验证

JSR 303 实现有Hibernate Validator 和 Apache BVal。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764322.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号