超详细关于JSR303服务端校验&&拦截器入门到案例使用

目录

一、JSR303

        1.1 JSR303的简介

        1.2 JSR303实现判空校验

二、拦截器

        2.1 什么是拦截器?

        2.2 建立一个拦截器

                2.2.1 配置拦截器

                2.2.2 拦截器方法的执行顺序

        2.3 建立拦截器链

                2.3.1 配置拦截器链

                2.3.2 拦截器链方法的执行顺序

        2.4 利用拦截器实现登录权限控制

                2.4.1 编写LoginController

                2.4.2 登录页面

                2.4.3 编写拦截器

                2.4.4 配置拦截器


一、JSR303

        1.1 JSR303的简介

                什么是JSR303?

JSR303是一个:{---服务端校验---}
它的作用:
解决了越过表单验证{客户端},直接访问页面的问题;

        1.2 JSR303实现判空校验

                我们通过上机实操来认识一下JSR303,实现的一些步骤:

                ① 导入pom依赖

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.7.Final</version>
    </dependency>

                ② 在待校验的数据库列段对应的实体类属性打上校验标签:非空校验

三种注解验证: 
     * @NotNull:作用于基本数据类型
     * @NotEmpty:作用于集合
     * @NotBlank:作用于字符串

        实体类:Clazz.java 

package com.leaf.ssm.model;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * @NotNull:作用于基本数据类型
 * @NotEmpty:作用于集合
 * @NotBlank:作用于字符串
 */
public class Clazz {

    @NotNull(message = "cid不能为空")
    protected Integer cid;

    @NotBlank(message = "班级名称不能为空")
    protected String cname;

    @NotBlank(message = "教员老师不能为空")
    protected String cteacher;

    protected String pic;

    public Clazz(Integer cid, String cname, String cteacher, String pic) {
        this.cid = cid;
        this.cname = cname;
        this.cteacher = cteacher;
        this.pic = pic;
    }

    public Clazz() {
        super();
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getCteacher() {
        return cteacher;
    }

    public void setCteacher(String cteacher) {
        this.cteacher = cteacher;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }
}

        ③ 在controller层方法上添加@Valid注解配合前面的校验标签;
            添加BindingResult,此对象包含所有校验为通过的错误信息;

        ④ 将所有的错误信息以Map集合的方式保存,并且传递到前台页面展示。

总的来说就是编写一个用来校验的方法:

valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request)

    /**
     * 校验的方法(演示校验注解)
     * @Valid:是与实体类中的服务端校验注解配合使用的
     * BindingResult:存放了所有违背校验的错误信息
     * @param clazz
     * @param bindingResult
     * @return
     */
    @RequestMapping("/valiAdd")
    public String valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request){
        if(bindingResult.hasErrors()){//违背了规则
            HashMap msg = new HashMap();
            //拿到所有错误
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            for (FieldError fieldError : fieldErrors) {
                //cid:cid不能为空
                System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
                //msg.put(cid, cid不能为空);
                msg.put(fieldError.getField(),fieldError.getDefaultMessage());
            }
            //如果出现了错误,应该将提示语显示在表单提示元素后方
            request.setAttribute("msg",msg);
            return "clzEdit";
        }else{//没有违背
            this.clazzBiz.insertSelective(clazz);
        }
        return "redirect:/clz/list";
    }

 接下来就让我们来测试一下是否成功校验啦:

 新增:

校验成功~

 

 


二、拦截器

        2.1 什么是拦截器?

拦截器的初步认知:
          ① SpringMVC的处理器拦截器,依赖于web框架,在实现上基于Java的反射机制,

属于面向切面编程(AOP)的一种运用。
          ② 一个拦截器实例在一个controller生命周期之内可以多次调用。

拦截器的三个特点:
    1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
    2) interceptor通常对处理器Controller进行拦截
    3) interceptor只能拦截dispatcherServlet处理的请求 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Leaf1217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值