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 相关文章推荐
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
Java比较两个对象中全部属性值是否相等的方法
Aug 07 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Flutter Navigator 实现路由传递参数
Apr 22 Java/Android
Android开发 使用文件储存的方式保存QQ密码
Apr 24 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
13个PHP函数超实用
2015/10/21 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
python中defaultdict的用法详解
2017/06/07 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Django框架实现的分页demo示例
2019/05/25 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
竞选班委演讲稿
2014/04/28 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
初中作文评语集锦
2014/12/25 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python