当前位置:首页 > 科技  > 软件

彻底明白Filter与Interceptor

来源: 责编: 时间:2024-05-16 17:42:34 98观看
导读Filter(过滤器)概述Servlet规范中定义的一种组件,用于在请求进入Servlet之前或响应返回客户端之前执行一些操作。它依赖于Servlet容器,几乎可以对任何请求进行过滤,随着Web应用的启动而启动,Web应用停止则Filter销毁。工作

Filter(过滤器)

概述

Servlet规范中定义的一种组件,用于在请求进入Servlet之前或响应返回客户端之前执行一些操作。它依赖于Servlet容器,几乎可以对任何请求进行过滤,随着Web应用的启动而启动,Web应用停止则Filter销毁。Um528资讯网——每日最新资讯28at.com

工作原理

通过实现javax.servlet.Filter,对请求进行过滤拦截,进而做统一处理。最后将请求交给Servlet进行处理并生成得到响应。得到响应以后,Filter可以对响应再次进行处理。Um528资讯网——每日最新资讯28at.com

图片图片Um528资讯网——每日最新资讯28at.com

应用场景

如进行过滤低俗文字,危险字符,日志记录、权限验证、字符编码处理等等。如防XSS攻击的XSSFilter过滤器。Um528资讯网——每日最新资讯28at.com

代码实现(SpringBoot举例)

创建Filter类

public class MyFilter implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {        // 初始化操作    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        // 在请求处理之前执行的操作        // 可以对请求进行修改、验证等操作        chain.doFilter(request, response);        // 在响应返回客户端之前执行的操作        // 可以对响应进行修改、记录日志等操作    }    @Override    public void destroy() {        // 销毁操作    }}

注册Filter

在Spring Boot中,我们可以通过配置类或使用@WebFilter注解来注册Filter。Um528资讯网——每日最新资讯28at.com

@Configurationpublic class FilterConfig {    @Bean    public FilterRegistrationBean<MyFilter> myFilter() {        FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();        registrationBean.setFilter(new MyFilter());        registrationBean.addUrlPatterns("/api/*"); // 设置过滤的路径        return registrationBean;    }}

Interceptor 拦截器介绍

概述

Interceptor是Spring框架提供的一种拦截器,与Servlet无关,它依赖于Web框架,用于在Controller方法执行前后进行处理。与Filter不同,Interceptor是Spring MVC框架特有的组件。它可以将一些共有的行为动作给通用化、标准化,进而让代码更加简洁,可扩展性更高。Um528资讯网——每日最新资讯28at.com

原理

图片图片Um528资讯网——每日最新资讯28at.com

基于实现HandlerInterceptor接口,并重写它的方法。它有如下方法:Um528资讯网——每日最新资讯28at.com

  • preHandle方法:目标资源方法执行前执行。返回true则继续往下执行 返回false则进行拦截。
  • postHandle方法:目标资源方法执行后执行
  • afterCompletion方法:视图渲染完毕后执行,最后执行。

应用场景

Interceptor主要用于处理与Controller相关的逻辑,比如权限验证、日志记录、统一异常处理等。Um528资讯网——每日最新资讯28at.com

代码实现

创建Interceptor类

public class MyInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        // 在Controller方法执行前执行的操作        // 返回true表示继续执行,返回false表示中断执行        return true;    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,                           ModelAndView modelAndView) throws Exception {        // 在Controller方法执行后、视图渲染前执行的操作    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,                                Exception ex) throws Exception {        // 在整个请求完成后执行的操作    }}

注册Interceptor

import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new MyInterceptor())                .addPathPatterns("/api/**") // 设置拦截的路径                .excludePathPatterns("/api/public/**"); // 设置排除的路径    }}

Filter与Interceptor的区别及如何选择

执行时机不同

  • Filter:在请求进入Servlet之前和响应返回客户端之前执行。
  • Interceptor:在Controller方法执行前、执行后、视图渲染前以及整个请求完成后执行。

范围

  • Filter:作用于整个Web应用,不仅限于Spring MVC。
  • Interceptor:仅作用于Spring MVC中的Controller层。

使用场景

  • Filter:适用于通用的请求处理逻辑,比如字符编码、日志记录等。
  • Interceptor:适用于与Controller相关的业务逻辑,比如权限验证、统一异常处理等。

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-88563-0.html彻底明白Filter与Interceptor

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#委托:实现灵活的方法调用

下一篇: 还是结构体指针写的代码看着舒服

标签:
  • 热门焦点
Top
Baidu
map