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 相关文章推荐
新手入门Jvm-- JVM对象创建与内存分配机制
Jun 18 Java/Android
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
java代码实现空间切割
Jan 18 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
java版 简单三子棋游戏
May 04 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
js下函数般调用正则的方法附代码
2008/06/22 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php array的学习笔记
2012/05/16 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
Python中的random()方法的使用介绍
2015/05/15 Python
Python 含参构造函数实例详解
2017/05/25 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
软件测试面试题
2014/01/05 面试题
运动会广播稿400字
2014/01/25 职场文书
婚礼主持词开场白
2014/03/13 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
校长寄语大全
2014/04/09 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
利用Pycharm连接服务器的全过程记录
2021/07/01 Python