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生成License的实现示例
Jun 16 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
java设计模式--原型模式详解
Jul 21 Java/Android
Java数据开发辅助工具Docker与普通程序使用方法
Sep 15 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 Java/Android
Java 异步任务计算FutureTask
Apr 28 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
一文了解Java动态代理的原理及实现
Jul 07 Java/Android
JDK8中String的intern()方法实例详细解读
Sep 23 Java/Android
浅谈Python魔法方法
Java实现二维数组和稀疏数组之间的转换
深入理解java.lang.String类的不可变性
springboot拦截器无法注入redisTemplate的解决方法
Java中PriorityQueue实现最小堆和最大堆的用法
探讨Java中的深浅拷贝问题
解决SpringBoot跨域的三种方式
Jun 26 #Java/Android
You might like
php Smarty模板生成html文档的方法
2010/04/12 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
php面向对象值单例模式
2016/05/03 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
jQuery操作cookie
2016/08/08 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
python tkinter组件摆放方式详解
2019/09/16 Python
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
安全横幅标语
2014/06/09 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
公司经营目标责任书
2015/01/29 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
欧元符号 €
2022/02/17 杂记