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用自带的Image IO给图片添加水印
Jun 15 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
java多态注意项小结
Oct 16 Java/Android
Mybatis是这样防止sql注入的
Dec 06 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
Spring boot admin 服务监控利器详解
Aug 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 cache类代码(php数据缓存类)
2010/04/15 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
js格式化时间小结
2014/11/03 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Form表单及django的form表单的补充
2019/07/25 Python
关于python中的xpath解析定位
2020/03/06 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
市场营销毕业生自荐信范文
2014/04/01 职场文书
保护环境倡议书范文
2014/05/13 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
2014年秘书工作总结
2014/11/25 职场文书
预备党员个人总结
2015/02/14 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python