• springMVC拦截器


    一:概念

    SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。可以自己定义一些拦截器来实现特定的功能。

    过滤器与拦截器的区别:拦截器是AOP思想的具体应用。

    过滤器

    • servlet规范中的一部分,任何java web工程都可以使用
    • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

    拦截器

    • 拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
    • 拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

    二:自定义拦截器

    自定义拦截器,必须实现 HandlerInterceptor 接口

    web.xml配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <servlet>
            <servlet-name>interceptor</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>interceptor</servlet-name>
            <url-pattern>/*
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    springmvc-servlet.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        <servlet>
            <servlet-name>interceptor</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>interceptor</servlet-name>
            <url-pattern>/*
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    自定义拦截器:

    package com.lmy.controllor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyInterceptor implements HandlerInterceptor {
    
        //在请求处理的方法之前执行
        //如果返回true则向后执行下一个拦截器
        //如果返回false就不继续执行
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("=======执行前========");
            return true;
        }
    
        //在请求处理方法执行之后执行
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("=======执行后========");
        }
    
        //在dispatcherServlet处理后执行,做清理工作
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("=======清除========");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    测试:

    package com.lmy.controllor;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class TestInterceptor {
    
        @GetMapping("/t1")
        public String t1(){
            System.out.println("我的拦截器");
            return "test";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    结果:

    =======执行前========
    我的拦截器
    =======执行后========
    =======清除========
    
    • 1
    • 2
    • 3
    • 4

    三:springMVC拦截器应用场景

    拦截器是指通过统一的拦截从浏览器发往服务器的请求来完成功能的增强
    一般用来解决共性的问题(乱码,权限等)

  • 相关阅读:
    C#asp.net考试系统+sqlserver
    java计算机毕业设计springboot+vue网络体检服务系统
    记录一下在Ubuntu18.04下,程序窗口之间切换快捷键
    SpringBoot SpringBoot 运维实用篇 3 多环境开发 3.5 多环境开发控制
    【微信小程序】授权登录流程解析
    基于LSTM encoder-decoder模型实现英文转中文的翻译机器
    UNITY与安卓⭐二、AndroidStudio中关于通讯的使用教学
    One bite of Stream(6)
    【MySQL集群二】使用MyCat和ProxySql代理MySQL集群
    【HDLBits 刷题 13】Circuits(8)Buliding Larger Circuits
  • 原文地址:https://blog.csdn.net/qq_41863697/article/details/127890881