Spring(拦截器)

3. spring mvc 拦截器

3.1 概述

  • spring mvc拦截器相当于 java web filter
  • 在处理器执行过程中,进行拦截或处理
    在这里插入图片描述
preHandler 拦截器处理前方法,如果返回true继续执行,如果返回false,表示被拦截。
postHandler 拦截器处理方式,controller执行完成后,将执行处理方法。
afterCompletion 完成方法,视图渲染完成触发。

3.2 入门案例

  1. 环境:项目、jar包、配置类

  2. 测试程序:controller、jsp

  3. 编写拦截器,对流程进行校验

  4. 编写配置文件

    1. 环境:项目、jar包、配置类
      在这里插入图片描述

    2. 测试程序:controller、jsp
      在这里插入图片描述

    package com.czxy.inter.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * @author 桐叔
     * @email liangtong@itcast.cn
     */
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/selectAll")
        public String selectAll() {
            System.out.println("2 controller-->selectAll");
            return "list";
        }
    }
    
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        查询结果
        <%
            System.out.println("4 jsp 输出");
        %>
    </body>
    </html>
    
    
    1. 编写拦截器,对流程进行校验
    package com.czxy.inter.interceptor;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author 桐叔
     * @email liangtong@itcast.cn
     */
    @Component
    public class MyInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("1 拦截前");
            //放行
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("3 执行中");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("5 最后完成");
        }
    }
    
    
    1. 编写配置文件,spring mvc 配置类,需要实现 WebMvcConfigurer 接口,重新 addInterceptors方法
    package com.czxy.inter.config;
    
    import com.czxy.inter.interceptor.MyInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.converter.StringHttpMessageConverter;
    import org.springframework.web.servlet.config.annotation.*;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    import javax.annotation.Resource;
    import java.nio.charset.Charset;
    
    /**
     * @author 桐叔
     * @email liangtong@itcast.cn
     */
    @Configuration      //配置类
    @ComponentScan(basePackages = {"com.czxy.inter.controller","com.czxy.inter.interceptor"})
    @EnableWebMvc
    public class SpringMVCConfig implements WebMvcConfigurer {
    
        @Resource
        private MyInterceptor myInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            InterceptorRegistration interceptorRegistration1 = registry.addInterceptor(myInterceptor);
            interceptorRegistration1.addPathPatterns("/**");
        }
    
    
        /**
         * 视图解析器
         * @return
         */
        @Bean
        public InternalResourceViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            // 前缀
            viewResolver.setPrefix("/WEB-INF/pages/");
            // 后缀
            viewResolver.setSuffix(".jsp");
            return viewResolver;
        }
    
    }
    
    

3.3 多拦截器

  • 执行流程

    在这里插入图片描述

  • 多拦截器拦截的顺序,就是在配置类中配置的顺序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值