Java中使用Filter过滤器的方法


Posted in Java/Android onJune 28, 2021

Filter过滤器

着重记录下 public void doFilter(){} 方法参数:

(1) ServletRequest servletRequest 

请求reqeust;

(2)ServletResponse servletResponse 

响应response;

(3)FilterChain filterChain

参数 filterChain,有一个doFilter() 方法,调用这个方法,可以使程序继续往下走,执行后续代码,如果有多个过滤器,它会继续执行下一个过滤器逻辑(开发中会出现多个过滤器情况)。

例子(下边例子是在springboot项目中的)

使用过滤器,日志输出接口的响应时间
filter -> FilterLog.java

package com.lxc.springboot.filter;
 
 
/**
 * 这个过滤器其实是给容器(tomcat)使用的
 *  public void doFilter(){} 方法参数:
 *
 * ServletRequest servletRequest : 请求reqeust
 * ServletResponse servletResponse : 响应response
 * FilterChain filterChain : filterChain.doFilter() 可以使用多个过滤器,继续调用下一个过滤器
 *
 * IDEA: 格式化代码 -> ctrl + alt + l
 * 添加 @Component 注解, spring会扫描这个类
 */
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
@Component
public class FilterLog implements Filter {
    // 使用指定类 - 初始化日志对象
    private static final Logger LOG = LoggerFactory.getLogger(FilterLog.class);
 
    // 初始化方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
 
    /**
     * 下边就是一个servlet,servlet - 就是我们的请求、响应,所以我们会拿到 request 和 response
     *
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        /**
         * request 可以拿到所有的请求信息!!!
         */
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        LOG.info("【全局过滤器】");
        LOG.info("--------- FilterLog日志开始 --------- ");
        LOG.info("- 请求地址: {}, 方法: {}", request.getRequestURL().toString(), request.getMethod());
        LOG.info("- 远程地址: {}, 域名: {}, 端口: {}", request.getRemoteAddr(), request.getRemoteHost(), request.getRemotePort());
        long startTime = System.currentTimeMillis(); // 13位 时间戳(毫秒)
        // 继续往后执行,是否有别的过滤器,没有 -> 进入应用,执行逻辑
        filterChain.doFilter(servletRequest, servletResponse);
        LOG.info(" --------- FilterLog 结束,耗时: {} ms --------- ", System.currentTimeMillis() - startTime);
    }
 
    // web服务器关闭时,Filter会销毁
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

 输出如下:

Java中使用Filter过滤器的方法

到此这篇关于Java中使用Filter过滤器的方法的文章就介绍到这了,更多相关Filter过滤器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
Java输出Hello World完美过程解析
Jun 13 Java/Android
Feign调用传输文件异常的解决
Jun 24 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
第五节 克隆 [5]
2006/10/09 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
php实现的双向队列类实例
2014/09/24 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
vue 插件的方法代码详解
2019/06/06 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python中extend和append的区别讲解
2019/01/24 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python程序输出无内容的解决方式
2020/04/09 Python
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
电子工程求职信
2014/07/17 职场文书
2015年防汛工作总结
2015/05/15 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
Python实现抖音热搜定时爬取功能
2022/03/16 Python