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 相关文章推荐
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
Java并发编程之Executor接口的使用
Jun 21 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
Java org.w3c.dom.Document 类方法引用报错
Aug 07 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP 验证码的实现代码
2011/07/17 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
js切换光标示例代码
2013/10/10 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
vue debug 二种方法
2018/09/16 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
简单实现python进度条脚本
2017/12/18 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
初婚未育未抱养证明
2014/01/12 职场文书
大学生毕业鉴定
2014/01/31 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
大学生就业意向书范文
2014/04/01 职场文书
文案策划求职信
2014/04/14 职场文书
书法大赛策划方案
2014/06/04 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server