IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring MVC (四) -> 正文阅读

[Java知识库]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>
        <tr>
            <td colspan="2"> <input type="submit" value="注册"> </td>
        </tr>
    </table>
    <%--取出password字段错误信息--%>
    <form:errors path="password"/>
</form:form>
</body>
</html>

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核心配置文件中配置消息属性文件

 <!--配置消息属性文件-->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/resource/errorMessages"/>
    </bean>

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。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:22:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:26:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码