eclipse中搭建springboot学习(5)---拦截器

本文详细介绍了如何在Spring MVC中实现和配置多个拦截器,包括FirstInterceptor和SecondInterceptor,通过具体代码展示了拦截器的preHandle、postHandle及afterCompletion方法的应用,以及如何通过WebAdapter将拦截器组成拦截器链。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建FirstInterceptor第一个拦截器

package com.example.demo1018.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class FirstInterceptor implements HandlerInterceptor{
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
            Exception exception) throws Exception {
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
        System.out.println("3. 整个请求结束之后被调用......FirstInterceptor......");
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
            throws Exception {
        // 请求处理之后进行调用,但是在视图被渲染之前
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......FirstInterceptor......");
    }
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        // 在请求处理之前进行调用
        System.out.println("1. 在请求处理之前进行调用......FirstInterceptor......");
        // 只有返回true才会继续向下执行,返回false取消当前请求
        return true;
    }

}
 

新建SecondInterceptor第二个拦截器 

package com.example.demo1018.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class SecondInterceptor implements HandlerInterceptor{
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
            Exception exception) throws Exception {
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
        System.out.println("3. 整个请求结束之后被调用......SecondInterceptor......");
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
            throws Exception {
        // 请求处理之后进行调用,但是在视图被渲染之前
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......SecondInterceptor......");
    }
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        // 在请求处理之前进行调用
        System.out.println("1. 在请求处理之前进行调用......SecondInterceptor......");
        // 只有返回true才会继续向下执行,返回false取消当前请求
        return true;
    }

}
 

 

将拦截器组成一个拦截器链

package com.example.demo1018.interceptor;

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

@Configuration
public class WebAdapter extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //众多的拦截器组成了一个拦截器链
        /**
         * 主要方法说明:
         * addPathPatterns 用于添加拦截规则
         * excludePathPatterns 用户排除拦截
         */
        registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/*");
        //拦截器SecondInterceptor不拦截hello
        registry.addInterceptor(new SecondInterceptor()).addPathPatterns("/*").excludePathPatterns("/hello");
        super.addInterceptors(registry);
    }

}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值