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 11 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
校领导推荐信
2013/11/01 职场文书
医疗纠纷协议书
2014/04/16 职场文书
学生自我评语大全
2014/04/18 职场文书
跑操口号
2014/06/12 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
加薪申请报告范本
2015/05/15 职场文书
离婚起诉书范本
2015/05/18 职场文书
交通事故责任认定书
2015/08/06 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Axios取消重复请求的方法实例详解
2021/06/15 Javascript