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 22 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
Aug 07 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
SpringBoot2零基础到精通之数据库专项精讲
Mar 22 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
如何删除多级目录
2006/10/09 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
python WindowsError的错误代码详解
2017/07/23 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
大学生创业计划书的用途
2014/01/08 职场文书
年度考核个人总结
2015/03/06 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android