Spring MVC (四)

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

一、数据验证概述

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

1.1 客户端验证

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

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

        客户端验证是可以过滤用户的误操作,是第一道防线,一般使用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" %>
<html>
<head>
    <title>注册界面</title>
</head>
<body>
<form:form modelAttribute="user" action="${pageContext.request.contextPath}/index/toRegister1" method="post">
    <p>注册界面</p>
    <table>
        <tr>
            <td>用户名: <input type="text" name="name" placeholder="请输入用户名"/> </td>
            <td> 密码:<input type="password" name="password"  placeholder="请输入密码"/> </td>
        </tr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值