Springboot中Filter如何使用

2023-10-27

一、在初始化配置时指定Filter

1.假设自定义一个LoggingFilter,它必须实现Filter接口。

public class LoggingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("进入了init方法...(初始化的时候进入init方法...)");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("进入了doFilter方法...(发起url请求的时候进入doFilter方法...)");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

2.要让上面的LoggingFilter生效,还需要注册Filter。在spring初始化配置信息的时候,将LoggingFilter进行注册。

@Configuration
public class Configure {

    public Configure() {
        init();
    }

    private void init() {
        System.out.println("初始化Configure类...");
    }

    @Bean
    public FilterRegistrationBean registLog1() {
        FilterRegistrationBean loggingFilter = new FilterRegistrationBean(new LoggingFilter());
        loggingFilter.addUrlPatterns("/*");//过滤条件
        loggingFilter.setName("LoggingFilter");//filter名称
        loggingFilter.setOrder(5);//存在多个filter时,控制加载顺序
        
        return loggingFilter;
    }
    
}

spring启动加载配置信息时,会将FilterRegistrationBean加载到容器中,并且我自定义的LoggingFilter也会跟着注入到FilterRegistrationBean实例中,这样就完成了LoggingFilter的注册。

二、采用@WebFilter配置Filter

1.仍然自定义一个LoggingFilter,并且实现Filter接口。

@Component //标记为组件,表示该类交给spring容器管理
//@ServletComponentScan
@WebFilter(filterName = "LoggingFilter", urlPatterns={"/*"}) //配置Filter信息
public class LoggingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("进入了init方法...(初始化的时候进入init方法...)");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("进入了doFilter方法...(发起url请求的时候进入doFilter方法...)");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

这种方法同样达到了效果,并且配置方式更为简单。需要注意的是:

@WebFilter(filterName = "LoggingFilter", urlPatterns={"/*"}) 

就好比原先web.xml里配置为:

<filter>
	<filter-name>LoggingFilter</filter-name>
	<filter-class>com.ft.filter.LoggingFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>LoggingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot中Filter如何使用 的相关文章

  • python requests cookies怎么转为_如何将requests.RequestsCookieJar转换为字符串

    新答案 好吧 所以我还是不知道你到底想达到什么目的 如果您想从requests RequestCookieJar对象中提取原始url 这样您就可以检查是否与给定的子域匹配 这是 据我所知 不可能的 不过 你也可以做些类似的事情 usr bi
  • Linux-线程的同步与互斥

    线程的同步与互斥 进程 线程间的互斥相关背景概念 互斥量 互斥量接口 互斥量的初始化 互斥量的销毁 加锁和解锁 改善抢票系统 互斥量原理 可重入与线程安全 重入和线程安全的概念 常见线程不安全情况 常见线程安全的情况 常见不可重入情况 常见
  • 【软件工程】-可行性研究报告

    GB8567 88 可行性研究报告 1引言 1 1编写目的 为了提高机房收费管理的灵活性和效率 减轻机房工作人员的工作负担 节约时间 对机房收费业务做到快速准确管理的目的 从而降低人力 经济的更各方面的消耗 本次编写主要是为了分析廊坊师范学
  • 电机速度曲线规划1:梯形速度曲线设计与实现

    电机驱动是很常见的应用 在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能 这就涉及到电机速度曲线规划的问题 在这篇中我们就来简单讨论一下电机的梯形曲线规划的问题 1 基本原理 梯形速度曲线控制算法是工业控制领域应用最为广泛的加
  • 在vc下环境变量的设置

    Error spawning cl exe 编译出错 有人说是没有设置 include环境变量 下面介绍在vc下如何设置环境变量 1 Microsoft Visual Studio下面3个子文件夹 Common VC98 My Projec
  • 1.嵌入式控制器EC学习,编译环境搭建

    工欲善其事 必先利其器 在学习EC相关知识之前 首先需要完成EC代码编译环境的搭建 需要如下内容 Keil C51 用于EC中C代码的编译器环境 EC源代码 我们使用从网上可以下载到的 ITE V12 4 Update 版的代码为例进行学习
  • JavaBean,List,Map转成json格式

    普通JavaBean 以User为例 转成json格式 1 转成JSONArray类型 User user new User user setUsername cxl user setPassword 1234 JSONArray json
  • GORM 基础 -- Gen

    https gorm io gen github 1 GEN Guides GEN 友好和更安全的代码生成 1 1 概述 来自动态原始SQL的惯用和可重用API 100 类型安全的DAO API 不使用 interface Database
  • printf(“%d,%d\n“,i--,i++)

    sample cpp include
  • Windows 下创建定时任务执行Python脚本

    文章目录 一 环境 二 脚本 三 创建定时任务 1 打开 任务计划程序 2 打开 创建任务 窗口 3 创建任务一一常规 4 创建任务一一触发器 5 创建任务一一操作 6 创建任务一一条件 7 创建任务一一设置 8 完成任务创建 四 验证定时
  • 记录自己在结构光三维重建领域的学习过程(一)

    仿真数据集与真是数据集之间差异较大 二者的网络均不可完美预测另一种数据 寻找解决办法 首先确定是不是数据的问题 阅读论文 Light field structured light projection data generation wit
  • 关于存储过程中SQL语句IN条件传参注意说

    背景说明 在数据库操作中我们经常会用到查询语句 在一些情况下 需要使用到IN条件 正常的查询中IN需要注意的是最好in中的参数不能超过1000个 超过1000的时候oracle会抛出异常 这个如何处理先不提 这次要说的是 如果在存储过程中使

随机推荐