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 18 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
Java 数组内置函数toArray详解
Jun 28 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
java如何实现socket连接方法封装
Sep 25 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Java 死锁解决方案
May 11 Java/Android
spring boot实现文件上传
Aug 14 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
dedecms中常见问题修改方法总结
2007/03/21 PHP
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
浅谈Python中的继承
2020/06/19 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
2015年学校少先队工作总结
2015/07/20 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android