首页 > 其他分享 >过滤器与拦截器

过滤器与拦截器

时间:2024-02-20 16:47:57浏览次数:21  
标签:拦截器 System Filter println 过滤器 public out

1. 过滤器 Filter

1.1 Filter 定义

Filter是sun公司中servlet2.3后增加的一个新功能,在javaEE中定义了一个接口 javax.servlet.Filter来描述过滤器。

Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序.它依赖于servlet容器,在实现上,基于函数回调,它可以对几乎所有请求进行过滤。

1.2 Filter 工作原理

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一处理等。

使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

  • 当服务器启动,会创建Filter对象,并调用init方法,只调用一次。
  • 当访问资源,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,
  • 当服务器关闭时,会调用Filter的destroy方法来进行销毁操作。

1.3 Filter 应用场景

在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符、敏感词过滤、响应信息压缩、控制权限、控制转向、做一些业务逻辑判断等。

1.4 Filter 实例

1.定义 Filter

package com.demo.filter;

import org.springframework.stereotype.Component;

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

/**
 * @author gx
 */
@Component
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("这是 myFilter 过滤器!");
        filterChain.doFilter(request, response);
        System.out.println("这是 myFilter 过滤器执行后!");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("这是 myFilter 初始化");
    }

    @Override
    public void destroy() {
        System.out.println("这是 myFilter 销毁");
    }
}

2. 配置过滤器

  • 方式一:web.xml
<filter>
    <description>测试过滤器</description>
    <filter-name>TestFilter</filter-name>
    <filter-class>com.test.filtes.TestFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 
  • 方式二:通过@WebFilter注解配置
@WebFilter(urlPatterns = "/*")
@Component
public class MyFilter2 implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("这是 myFilter2 过滤器!");
        filterChain.doFilter(request, response);
        System.out.println("这是 myFilter2 过滤器执行后!");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("这是 myFilter2 初始化");
    }

    @Override
    public void destroy() {
        System.out.println("这是 myFilter2 销毁");
    }
}

启动类上可能需要这个注解:@ServletComponentScan

2. 拦截器

标签:拦截器,System,Filter,println,过滤器,public,out
From: https://www.cnblogs.com/cnff/p/18023433

相关文章

  • Spring/SpringBoot 拦截器
    Spring/SpringBoot拦截器拦截器的作用:拦截器,可以进行请求过滤、权限管理、打印日志、数据校验等。拦截器,可以在请求前、请求后进行处理。代码示例:拦截器MyInterceptor:Spring的拦截器,需要实现HandlerInterceptor接口。publicclassMyInterceptorimplementsHandler......
  • JS实现一个布隆过滤器
    之前专门聊过令牌桶算法,而类似的方案还有布隆过滤器。它一般用于高效地查找一个元素是否在一个集合中。用js实现如下所示:classBloomFilter{constructor(size,hashFunctions){this.size=size;this.bitArray=newArray(size).fill(0);thi......
  • mybatis 通过拦截器打印完整的sql语句以及执行结果操作
    下面的文件放在source-fw的【jp.co.token.sikyuu.iterceptor】包下面MybatisInterceptor.javaInterceptorForQry.java下面的文件放在source-fw的【jp.co.token.sikyuu.common】包下面FastJsonUtils.java下面的文件放在WebRoot/WEB-INF/lib/路径下面fastjson-......
  • Java过滤器实现敏感词过滤
    一、前言在我们日常开发中经常会遇到前端输入数据保存到数据库的需求,比如留言板、回复等。我们需要规范输入内容就需要防范敏感词汇,这涉及到维护良好的用户体验、遵守法规以及保护用户免受侮辱和威胁。通过实施敏感词汇过滤,我们可以降低不适当内容的传播风险,提高平台的信誉度。二、......
  • XYplorer 颜色过滤器
    len:>=260//overlongfilenames>FFFFFF,D94235len:>=260:这是一个条件,指定文件名长度大于或等于260个字符。在Windows系统中,通常建议避免使用过长的文件名,因为它们可能会导致某些程序或操作出现问题。XYplorer通过这个条件帮助用户快速识别出这些可能的问题文件。//overlongfi......
  • 面试官:SpringCloudGateway过滤器类型有哪些?
    在SpringCloudGateway中,过滤器是在请求到达目标服务之前或之后,执行某些特定操作的一种机制。例如,它可以实现对传入的请求进行验证、修改、日志记录、身份验证、流量控制等各种功能。在SpringCloudGateway中,过滤器总共分为以下两大类:局部过滤器:只作用于某一个路由(route)。全......
  • 面试官:SpringCloudGateway过滤器类型有哪些?
    在SpringCloudGateway中,过滤器是在请求到达目标服务之前或之后,执行某些特定操作的一种机制。例如,它可以实现对传入的请求进行验证、修改、日志记录、身份验证、流量控制等各种功能。在SpringCloudGateway中,过滤器总共分为以下两大类:局部过滤器:只作用于某一个路由(route......
  • SpringMVC拦截器的使用
    SpringMVC中的拦截器主要用于拦截控制器方法的执行。SpringMVC配置拦截器SpringMVC中的拦截器需要实现HandlerInterceptor接口publicclassFirstInterceptorimplementsHandlerInterceptor{//该方法是在控制器方法执行前执行@OverridepublicbooleanpreHandl......
  • 登录认证-完成(拦截器)
    //JWT令牌生成,工具类packagecom.di.bigevent.utils;importcom.auth0.jwt.JWT;importcom.auth0.jwt.algorithms.Algorithm;importjava.util.Date;importjava.util.Map;publicclassJwtUtil{privatestaticfinalStringKEY="itheima";/......
  • 利用Mybatis拦截器实现自定义的ID自增器
    原生的Mybatis框架是没有ID自增器,但例如国产的MybatisPlus却是支持,不过,MybatisPlus却是缺少了自定属性的填充;例如:我们需要自定义填充一些属性,updateDate、createDate等,这时MybatisPlus自带的ID自增器就无法满足需求;这种时候我们就需要自定义的ID增加器,可以自定义ID增长策略同时......