【十四】Spring Boot之 Interceptor(自定义拦截器)

执行顺序

前置Filter---->前置Interceptor---->controller---->后置Interceptor---->后置Filter

实现步骤:

1、创建自己的拦截器类并实现 HandlerInterceptor 接口。

2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。

3、实例化自定义的拦截器

4、将拦截器对像手动添加到拦截器链中(在addInterceptors方法中添加)

代码

自定义拦截器

实现 HandlerInterceptor 接口

preHandle()  方法:进入controller层之前拦截请求

postHandle()  方法:处理请求完成后视图渲染之前的处理操作 请求之后,控制器中抛出了异常的话就不会执行。

afterCompletion()  方法:视图渲染之后的操作,请求之后调用,不管抛不抛出异常都会被调用.参数中异常如果被异常处理器调用的话就不会传入到参数中。

package com.sid.util.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;

/**
 * @program: springboot
 * @description: 自定义拦截器
 * @author: Sid
 * @date: 2018-11-20 14:32
 * @since: 1.0
 **/
@Component
//1、创建自己的拦截器类并实现 HandlerInterceptor 接口。
public class MyInterceptor implements HandlerInterceptor {

    /**
     * 进入controller层之前拦截请求
     * */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor preHandle");
        return true;
    }

    /**
     * 处理请求完成后视图渲染之前的处理操作
     *
     * 请求之后,控制器中抛出了异常的话就不会执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor postHandle");
    }

    /**
     * 视图渲染之后的操作
     *
     * 请求之后调用,不管抛不抛出异常都会被调用.参数中异常如果被异常处理器调用的话就不会传入到参数中.
     * */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor afterCompletion");
    }
}

注册拦截器

spring boot 1.X是继承WebMvcConfigurerAdapter

重写addInterceptors方法,注册拦截器

package com.sid.util.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.annotation.Resource;

/**
 * @program: springboot
 * @description:
 * @author: Sid
 * @date: 2018-11-20 14:36
 * @since: 1.0
 **/
@Configuration
//2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
public class MyInterceptorConfiguration extends WebMvcConfigurerAdapter {

    //3、实例化自定义的拦截器
    @Resource
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //如果interceptor中不注入redis或其他项目可以直接new
        //4、将拦截器对像手动添加到拦截器链中(在addInterceptors方法中添加)
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值