SpringMVC之JSR303和拦截器

news2024/12/24 0:57:49

目录

一.JSR303

二.JSR常用的注解

三.JSR快速入门

四.拦截器

   ⭐⭐⭐拦截器和过滤器有什么不一样,或者它们的区别是什么??

五.拦截器快速入门--登录的案例


一.JSR303

        JSR 303 是 Java 规范的一部分,全称为 Bean Validation 框架。它定义了一组基于标注的验证注解,用于验证 Java 对象的属性值的合法性。JSR 303 可以用于验证用户输入、数据持久化前的数据校验等场景。

        JSR 303 是一种后端验证(服务器端验证)的解决方案。它在后端应用程序中用于验证用户提交的数据或其他对象的合法性。

        与后端验证相对应的是前端验证(客户端验证),前端验证是在用户浏览器中进行的验证过程,通过JavaScript等前端技术实现。前端验证主要用于提供无效请求即时反馈和减少的网络流量,但不能完全依赖前端验证来确保数据的安全性和合法性。因此,后端验证仍然是必要的,并且JSR 303 提供了一种便捷的后端验证解决方案。所以我们一般都是前端一套校验,后端在一套校验,这样安全性就能够大大得到提升了。

二.JSR常用的注解

        这些注解都是别人已经写好的了,我们直接用就行,但是如果要是我们要用的注解没有怎么办?之后我会和大家讲解如何去制作一个注解,自定义注解

注解说明
@Null用于验证对象为null
@NotNull用于对象不能为null,无法查检长度为0的字符串
@NotBlank只用于String类型上,不能为null且trim()之后的size>0
@NotEmpty用于集合类、String类不能为null,且size>0。但是带有空格的字符串校验不出来
@Size用于对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length用于String对象的大小必须在指定的范围内
@Pattern用于String对象是否符合正则表达式的规则
@Email用于String对象是否符合邮箱格式
@Min用于Number和String对象是否大等于指定的值
@Max用于Number和String对象是否小等于指定的值
@AssertTrue用于Boolean对象是否为true
@AssertFalse用于Boolean对象是否为false

三.JSR快速入门

        首先,我们要先导入JSR的pom依赖

<!-- JSR303 -->
<hibernate.validator.version>6.0.7.Final</hibernate.validator.version>

<!-- JSR303 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>${hibernate.validator.version}</version>
</dependency>

        在实体类的属性上面写上如果为空就提示的信息语句

        接下来需要校验上方的注解

    //    给数据添加服务端校验
    @RequestMapping("/valiAdd")
    public String valiAdd(@Validated Struts struts, BindingResult result, HttpServletRequest req){
//        如果服务端验证不通过,有错误
        if(result.hasErrors()){
//            服务端验证了实体类的多个属性,多个属性都没有验证通过
            List<FieldError> fieldErrors = result.getFieldErrors();
            Map<String,Object> map = new HashMap<>();
            for (FieldError fieldError : fieldErrors) {
//                将多个属性的验证失败信息输送到控制台
                System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
                map.put(fieldError.getField(),fieldError.getDefaultMessage());
            }
            req.setAttribute("errorMap",map);
        }else {
            this.strutsBiz.insertSelective(struts);
            return "redirect:list";
        }
        return "edit";
    }

        接下来需要设置提示词

        这样一个JSR的注解判断就完成了,接下来我们看看结果吧!

 

四.拦截器

        拦截器(Interceptor)是一种在软件系统中用于拦截、处理和转发请求和响应的组件或模块。它可以在请求到达目标处理程序之前或响应返回给客户端之前对其进行处理。

        以下是拦截器的主要作用:

  1. 身份验证和权限控制:拦截器可以用来验证请求的身份和权限,例如跳转到登录页面或拒绝访问。

  2. 日志记录和跟踪:拦截器可以记录请求和响应的详细日志,包括请求的参数、执行时间、错误信息等。这有助于开发人员在系统中追踪问题和进行故障排除。

  3. 缓存和性能优化:拦截器可以实现结果缓存,将频繁请求的结果缓存在内存或其他存储中,减少对后端资源的访问。这有助于提高系统的性能和响应速度。

  4. 异常处理:拦截器可以捕获系统中的异常,例如返回自定义错误页面或发送错误报告。

  5. 请求和响应的处理和修改:拦截器可以对请求和响应进行修改和处理,例如添加、删除或修改请求参数、设置响应头、处理响应结果等。

   ⭐⭐⭐有人可能会问,拦截器和过滤器有什么不一样,或者它们的区别是什么??

  • 过滤器(filter)

    1.filter属于Servlet技术,只要是web工程都可以使用

    2.filter主要由于对所有请求过滤

    3.filter的执行时机早于Interceptor

  • 拦截器(interceptor)

    1.interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用

    2.interceptor通常由于对处理器Controller进行拦截

    3.interceptor只能拦截dispatcherServlet处理的请求

五.拦截器快速入门--登录的案例

        所谓拦截器,首先当然是要写一个拦截器方法

package com.yinzi.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author yinzi
 * @create 2023-09-12 13:02
 */
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("【implements】:preHandle...");
        StringBuffer url = request.getRequestURL();
        if (url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
            //        如果是 登录、退出 中的一种
            return true;
        }
//            代表不是登录,也不是退出
//            除了登录、退出,其他操作都需要判断是否 session 登录成功过
        String uname = (String) request.getSession().getAttribute("uname");
        if (uname == null || "".equals(uname)){
            response.sendRedirect("/page/login");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

        接着,在spring-mvc中进行配置‘

    <!--配置拦截器-->
    <mvc:interceptors>
        <bean class="com.yinzi.interceptor.LoginInterceptor"></bean>
    </mvc:interceptors>

        写一个登录的方法

package com.yinzi.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @author yinzi
 * @create 2023-09-12 13:03
 */
@Controller 
public class LoginController {
    @RequestMapping("/login")
    public String login(HttpServletRequest req){
        String uname = req.getParameter("uname");
        HttpSession session = req.getSession();
        if ("zs".equals(uname)){
            session.setAttribute("uname",uname);
        }
        return "redirect:/list";
    }

    @RequestMapping("/logout")
    public String logout(HttpServletRequest req){
        req.getSession().invalidate();
        return "redirect:/list";
    }
}

      最后,就是前端代码


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>登录界面</h1>
<form action="/login" method="post">
    用户名字:<input name="uname">
    <input type="submit">

</form>
</body>
</html>

 结果:

它会经过拦截器进行判断

        好啦,今天的分享就到这啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始,轻松学习如何在CentOS 7服务器上安装、调优和使用Tomcat 8.5

PS&#xff1a;文章最后有“开心一刻”&#xff0c;记得看哦&#xff0c;给生活增加点儿趣味。 前言 Tomcat是一个广泛使用的开源Java Servlet容器&#xff0c;也是部署、管理和运行Java Web应用程序的首选之一。本文将为您详细介绍在CentOS 7服务器上安装、调优和使用Tomcat 8…

2023年数维杯数学建模B题节能列车运行控制优化策略求解全过程文档及程序

2023年数维杯数学建模 B题 节能列车运行控制优化策略 原题再现&#xff1a; 在城市交通电气化进程快速推进的同时&#xff0c;与之相应的能耗增长和负面效应也在迅速增加。城市轨道交通中的快速增长的能耗给城轨交通的可持续性发展带来负担。2018 年&#xff0c;北京、上海、…

Firefox使用SSH代理配置

原料 火狐浏览器 SSH账号 配置MyEntunnel MyEntunnel是用来登录SSH服务器并在本机自动架设一个socks5代理的软件。 把SSH帐号信息&#xff08;包括SSH服务器地址&#xff0c;SSH帐号&#xff0c;SSH密码&#xff09;一一填写到MyEntunnel对应的地方后&#xff0c;点击 “保存…

centos通过docker安装rabbitMq和延迟队列说明

安装步骤 首先进行docker安装可参考docker官网 下载镜像启动rabbitmq下载rabbitMq插件进入docker命令安装插件重新启动rabiitmq 1.下载镜像 docker pull rabbitmq:3.9.152.启动镜像 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERad…

开源家政服务平台小程序源码系统分享 带完整安装教程

继续分享一个完全开源的的家政服务平台的小程序源码系统&#xff0c;带前后端带完整教程&#xff0c;可以商业运营&#xff0c;功能十分的强大。 家政服务小程序开发源码的核心功能在于提供一个简洁、直观的界面&#xff0c;让用户可以方便地浏览并选择各类家政服务。不论是清洁…

掌握信息利器,快速发现潜在商机——介绍一款高效的数据检索软件

掌握信息利器&#xff0c;快速发现潜在商机——介绍一款高效的数据检索软件 在当今信息爆炸的时代&#xff0c;获取准确、实时的信息变得至关重要。为了帮助您快速发现潜在商机&#xff0c;我们推出了一款功能强大的数据检索软件。无论您是市场调研人员、销售专员还是企业经营者…

批量文件重命名:智能去除特殊符号,轻松管理文件名

在我们的日常生活中&#xff0c;我们经常会遇到各种各样的文件&#xff0c;这些文件名可能包含一些特殊符号&#xff0c;影响了我们对这些文件的正常使用。为了解决这个问题&#xff0c;我们可以使用批量文件重命名工具&#xff0c;智能去除这些特殊符号&#xff0c;让您的文件…

企业选择堡垒机要关注哪些点你知道吗?

企业选择堡垒机要关注哪些点你知道吗&#xff1f; 关注点1、需求 目前市面上堡垒机厂商很多&#xff0c;堡垒机类型也很多&#xff0c;首先你要明确自身需求&#xff0c;才能去选择合适的堡垒机厂商。 关注点2、预算 一般硬件堡垒机相对云堡垒机贵一点&#xff1b;云堡垒机…

windowds-server2008安装配置jdk1.8

一、安装准备 1&#xff09;获取jdk1.8安装包&#xff0c;上传到服务器D:\xwsoft\jdk 2&#xff09;创建jdk和jre安装目录 二、安装 1、双击下载的exe文件&#xff0c;开始安装。如下图&#xff0c;点击下一步 2、选择jdk的安装目录,安装位置&#xff1a;D:\xwsoft\jdk…

Type-C协议Ver2.0(学习笔记)

​​​​​​​1 简介 随着USB接口的持续成功&#xff0c;需要调整USB技术&#xff0c;以服务于新型计算平台和设备趋向于更小、更薄、更轻的外形。这些较新的平台和设备中的许多已经到了现有USB插座和插头阻碍创新的地步&#xff0c;特别是考虑到标准A和标准B版本USB连接器的…

一篇文章带你了解红黑树并将其模拟实现

了解红黑树并将其模拟实现 红黑树的概念和性质1. 概念2. 性质 红黑树的结构红黑树的节点定义及红黑树结构成员定义红黑树的插入1. 按照二叉搜索的树规则插入新节点2. 检测新节点插入后&#xff0c;红黑树的性质是否造到破坏情况一: cur为红&#xff0c;p为红&#xff0c;g为黑&…

正中优配:A股三大指数集体反弹 医药板块全线走强

周一&#xff0c;A股商场展开反弹&#xff0c;三大指数大部分时间单边上扬&#xff0c;特别是午后在人民币汇率增值的提振下&#xff0c;指数呈现一轮脉冲式上涨&#xff0c;同时伴随北向资金显着回流。医药、轿车板块全天表现强势&#xff0c;券商板块午后显着反弹。 到昨日收…

电动取暖器、加热器、暖风机、亚马逊各国要求标准都有哪些?

UL1278测试报告介绍 UL1278是针对电气安全方面的测试报告标准&#xff0c;主要用于评估各种电器的安全性能&#xff0c;以确保它们在使用过程中不会对人身安全造成威胁。桌面暖风机作为一款加热设备&#xff0c;需要满足UL1278标准才能进入美国市场。 每年的十月份开始国外气温…

接口测试(详细总结)

序章 ​ 说起接口测试&#xff0c;网上有很多例子&#xff0c;看了不不知道他们说的什么&#xff0c;觉得接口测试&#xff0c;好高大上。认为学会了接口测试就能屌丝逆袭&#xff0c;走上人生巅峰&#xff0c;迎娶白富美。因此学了点开发知识后&#xff0c;发现接口测试其实都…

VMware中安装WindowsXP虚拟机详细步骤

有些小伙伴肯定会好奇&#xff1a;这都 Windows11 的年代了&#xff0c;怎么还要学习安装 Windows XP 操作系统呢&#xff1f; 虽然我们普通用户基本都是用 Windows10 或者 Windows11&#xff0c;但是你会发现很多公司、部门包括一些特殊场合用的都是 Windows XP 系统&#xff…

[每周一更]-(第62期):SRE 是什么?

在公司Devops平台搭建&#xff0c;采用了JenkinsGitGitlabDocker&#xff0c;进行了自动化构建和部署代码&#xff0c;解放了繁杂的代码更改到test/prod环境的问题&#xff1b; 这部分更多是运维比例极大&#xff0c;少量的开发操作&#xff0c;基本都是配置命令行以及yml配置、…

【LeetCode75】第五十三题 猜数字大小

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目就是让我们猜数字&#xff0c;要猜中的数字为1~n&#xff0c;并且给我们提供一个api&#xff0c;传入一个数字表示是我们猜的数&…

ABB UF C911B108 3BHE037864R010控制主板模块

ABB UF C911B108 3BHE037864R010 控制主板模块通常用于ABB的工业自动化和控制系统中&#xff0c;作为关键组件之一&#xff0c;用于执行控制、监测和通信任务。以下是通常情况下控制主板模块的一些产品功能&#xff1a; 高性能处理器&#xff1a;ABB UF C911B108 3BHE037864R01…

使用ExcelJS快速处理Node.js爬虫数据

什么是ExcelJS ExcelJS是一个用于处理Excel文件的JavaScript库。它可以让你使用JavaScript创建、读取和修改Excel文件。 以下是ExcelJS的一些主要特点&#xff1a; 支持xlsx、xlsm、xlsb、xls格式的Excel文件。可以创建和修改工作表、单元格、行和列。可以设置单元格样式、字…

C++之构造函数初始化列表()与{}区别(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…