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 Swing实现自助取款机系统
Jun 11 Java/Android
springboot拦截器无法注入redisTemplate的解决方法
Jun 27 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
May 20 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
Android中View.post和Handler.post的关系
Jun 05 Java/Android
HttpClient实现文件上传功能
Aug 14 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
PHP文本操作类
2006/11/25 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
CentOS安装php v8js教程
2015/02/26 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
uni app仿微信顶部导航条功能
2019/09/17 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
python中的数据结构比较
2019/05/13 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python中数字是否为可变类型
2020/07/08 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
web页面录屏实现
2019/02/12 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
银行实习自我鉴定
2013/10/12 职场文书
英语教研活动总结
2014/07/02 职场文书
创优争先心得体会
2014/09/11 职场文书
年度考核个人总结
2015/03/06 职场文书
培训感想范文
2015/08/07 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
python实现网络五子棋
2021/04/11 Python