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方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
详解Java实践之适配器模式
Jun 18 Java/Android
Java实现多文件上传功能
Jun 30 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
MyBatis自定义SQL拦截器示例详解
Oct 24 Java/Android
Jpa Specification如何实现and和or同时使用查询
Nov 23 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
php目录拷贝实现方法
2015/07/10 PHP
详解php命令注入攻击
2019/04/06 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
小程序自定义日历效果
2018/12/29 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python实现合并字典的方法
2015/07/07 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
地理科学专业毕业生求职信
2013/10/15 职场文书
新学期决心书
2014/03/11 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
工作检讨书怎么写
2015/01/23 职场文书
早会开场白台词大全
2015/06/01 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技