• SpringMVC的拦截器和数据校验


    SpringMVC拦截器

    什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。

    Controller

    @Controller
    @RequestMapping("/my")
    public class MyController {
        @RequestMapping("/dofirst")
        public String  doFirst(){
            System.out.println("==========控制器中的方法=========");
            return "index";
        }

    自定义拦截器类

    public class MyIntercept implements HandlerInterceptor {
        /**
         * 在执行器 走之前执行的方法,改方法返回值为boolean,当为true代表放行,false为拦截器就不能执行到Controller
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("===========拦截器中的perHandle()方法============");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("============在HandleAdapter之后执行,在DispatcherServlet解析试图之前执行===============");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("===================呈现之后调用==================");
        }
    }

    Spring-mvc.xml文件

    <!--配置拦截器-->
    <mvc:interceptors>
        <!--如果在此处又多套拦截器,则按照配置顺寻执行-->
        <mvc:interceptor>
            <mvc:mapping path="/my/**"/>
            <bean class="com.springmvc.interceptor.MyIntercept"/>
        </mvc:interceptor>
    </mvc:interceptors>

    拦截器的执行流程

     

    拦截器和过滤器的区别

    过滤器

    依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等

    拦截器

    依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

    SpringMVC数据校验

    导入依赖

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.4.1.Final</version>
    </dependency>

    Jsp页面

    <body>
        <form action="/my/validate" method="post">
            编号:<input type="text" name="user_id"/> <br/>
            姓名: <input type="text" name="user_name"/><br/>
            邮箱: <input type="text" name="user_email"/> <br/>
            手机号: <input type="text" name="user_phone"/> <br/>
            地址: <input type="text" name="user_address"/> <br/>
            身份证号: <input type="text" name="user_cardCode"/> <br/>
            <input type="submit" value="提交"/>
        </form>
    </body>
    
     

    编写实体类编写校验注解

    @NotNull(message = "id不能为空")
    private Integer user_id;
    @NotNull(message = "姓名不能为空")
    private String user_name;
    @Email(message = "邮箱格式不正确")
    private String user_email;
    @Pattern(regexp = "1[3|5|7|8|]\d{9}",message = "手机号格式不正确")
    private String user_phone;
    private String user_address;
    @Pattern(regexp = "/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/",message = "身份证格式不正确")
    private String user_cardCode;

     

    Controller

    @RequestMapping("/validate")
        public String validate(@Valid UserInfo userInfo, BindingResult bindingResult){
            //如果有异常
        if (bindingResult.hasErrors()){
            //获取异常信息
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            //将异常信息输出
            for (ObjectError error:allErrors){
                System.out.println(error.getDefaultMessage());
            }
        }
        return "index";
    }

    页面

     

    控制台

    数据校验注解使用

     

     

  • 相关阅读:
    构建git+gerrit+repo的Android代码服务器
    简单学习:repo入门
    git checkout 命令详解
    python学习第一天
    window下的git工具msysgit的使用
    git基本操作
    echarts 使用示例
    管道命令
    jquery修改文档结构
    JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/szhhhh/p/11842902.html
Copyright © 2020-2023  润新知