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 相关文章推荐
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
Prototype框架详解
2015/11/25 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
js的三种继承方式详解
2017/01/21 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
vue页面切换过渡transition效果
2018/10/08 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python模块restful使用方法实例
2013/12/10 Python
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python命令行工具Click快速掌握
2019/07/04 Python
wxPython实现绘图小例子
2019/11/19 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
村委会贫困证明
2014/01/14 职场文书
超市促销活动方案
2014/03/05 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang