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 相关文章推荐
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
alibaba seata服务端具体实现
Feb 24 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Android studio 简单计算器的编写
May 20 Java/Android
Java处理延时任务的常用几种解决方案
Jun 01 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
Jun 14 Java/Android
Java界面编程实现界面跳转
Jun 16 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 23 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
js选择器全面解析
2016/06/27 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
简单理解Python中的装饰器
2015/07/31 Python
Python变量和数据类型详解
2017/02/15 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
python文本数据处理学习笔记详解
2019/06/17 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
资深地理教师自我评价
2013/09/21 职场文书
酒店应聘自荐信
2013/11/09 职场文书
初中生学习的自我评价
2013/11/14 职场文书
门卫岗位职责
2013/11/15 职场文书
园林资料员岗位职责
2013/12/30 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
爱情保证书范文
2014/02/01 职场文书
学生会干部自荐信
2014/02/04 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015年新农合工作总结
2015/03/30 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书