【java】过滤器与拦截器

目录

过滤器

拦截器

过滤器与拦截器的区别


在实际开发中,过滤器拦截器是我们经常使用的,尽管这两者在功能上有许多相似之处,比如二者都是 AOP 编程思想的体现,日志记录等,但一谈到它们的区别,许多人可能会感到困惑,很多人可能没有深入区分和总结这两者,因此常常难以准确地理解它们各自的作用和使用场景,本文主要是对这两者进行区分和总结。

过滤器

过滤器(Filter)是一种在Web应用中用于拦截和处理请求与响应的机制,它通常在请求到达目标资源之前或者响应从目标资源返回之前进行处理,过滤器的主要作用是对请求和响应进行预处理和后处理,以实现一些通用功能,如数据修改、安全检查和日志记录等。

过滤器的实现:

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;


@Component
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器:执行 init 方法。");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("过滤器:开始执行 doFilter 方法。");
        chain.doFilter(request, response);
        System.out.println("过滤器:结束执行 doFilter 方法。");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器:执行 destroy 方法。");
    }
}

拦截器

拦截器(Interceptor)是另一种用于处理请求和响应的机制,特别是在使用 Spring 框架进行开发时,与过滤器类似,拦截器也可以用于请求和响应的处理,但它们主要作用于业务逻辑层,提供了更细粒度的控制和灵活性。

拦截器的实现:

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

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

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器:执行 preHandle 方法。");
        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 方法。");
    }
}

过滤器与拦截器的区别

过滤器(Filter)拦截器(Interceptor)
定义用于对请求和响应进行预处理和后处理用于在请求处理的生命周期中执行自定义操作
适用层级

Servlet 层,处理请求和响应的底层

Spring MVC 层,处理请求的业务逻辑层
实现接口实现 javax.servlet.Filter 接口实现 org.springframework.web.servlet.HandlerInterceptor 接口
应用场景敏感词过滤、字符集编码设置、响应数据压缩登录判断、权限判断、日志记录
执行顺序先于Servlet或后于Servlet在Controller方法执行前后;视图渲染前后执行
作用范围全局适用,通常对所有请求和响应通常用于特定的请求路径和处理逻辑

request链路全过程,如下图所示:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值