过滤器和拦截器

本文介绍了Filter和Interceptor两种技术在Web开发中的作用。Filter属于Servlet技术,全局生效,而Interceptor是SpringMVC中的概念,仅针对SpringMVC请求进行增强。通过示例展示了如何在SpringBoot中配置和使用Filter及Interceptor,以及MybatisPlus中的分页拦截器配置。

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

Filter属于servlet,Interceptor属于SpringMVC

过滤器的作用范围是真个servlet,属于servlet技术,并且在springboot中使用的时候需要使用@ServletComponentScan注解来支持Java一些自带servlet的原始技术,Servlet,filter,listener可以直接通过@WebServlet,@WebFilter,@WebListener

拦截器仅针对与SpringMVC的访问进行增强

先定义一个类来实现HandlerInterceptor,并且使用@Component注解,逻辑在此类中写

@Component //注意当前类必须受Spring容器控制
//定义拦截器类,实现HandlerInterceptor接口
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    //原始方法调用前执行的内容
    //返回值类型可以拦截控制的执行,true放行,false终止
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle..."+contentType);
        return true;
    }

    @Override
    //原始方法调用后执行的内容//如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行跳转, 处理器出现异常该方法不执行
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    @Override
    //原始方法调用完成后执行的内容//如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理,不管有没有异常,该方法都执行
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

在配置类中加载刚才定义的拦截器

@Configuration
public class SpringMvcSupport implements WebMvcConfigurer {
    @Autowired
    private ProjectInterceptor projectInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //配置拦截器
        registry.addInterceptor(projectInterceptor)//添加拦截器
            .addPathPatterns("/books","/books/*")//添加需要拦截的路径
            .excludePathPatterns();//不包括
    }
}
  1. request:请求对象

  2. response:响应对象

  3. handler:被调用的处理器对象,本质上是一个方法对象,对反射技术中的Method对象进行了再包装

MybatisPlus中的分页拦截器,需要设置MybatisPlus的配置文件,并创建返回值为MybatisPlusInterceptor类的拦截器方法,在方法中创建MP的拦截器对象并添加分页插件后返回

/**
 * 配置MP的分页插件
 */
@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值