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 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
Java实现二维数组和稀疏数组之间的转换
Jun 27 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
Java练习之潜艇小游戏的实现
Mar 16 Java/Android
Netty客户端接入流程NioSocketChannel创建解析
Mar 25 Java/Android
springboot用户数据修改的详细实现
Apr 06 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
php 读取文件乱码问题
2010/02/20 PHP
php实现快速排序法函数代码
2012/08/27 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
用Python实现换行符转换的脚本的教程
2015/04/16 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
档案工作汇报材料
2014/08/21 职场文书
实习计划书范文
2015/01/16 职场文书
春节随笔
2015/08/15 职场文书