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 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Java版 单机五子棋
May 04 Java/Android
解决Springboot PostMapping无法获取数据的问题
May 06 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP分页显示制作详细讲解
2006/10/09 PHP
php.ini 中文版
2006/10/28 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
php实现快速排序法函数代码
2012/08/27 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
Python 自动补全(vim)
2014/11/30 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python多进程间通信代码实例
2019/09/30 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
小区门卫岗位职责
2013/12/31 职场文书
大学毕业感言100字
2014/02/03 职场文书
普通话演讲稿
2014/09/03 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
python内置进制转换函数的操作
2021/06/02 Python