0
点赞
收藏
分享

微信扫一扫

Filter过滤器的使用

成义随笔 2022-06-24 阅读 115

Filter过滤器是javaWeb层面的,它跟Servlet类似,每次前端请求,首先进入的是过滤器,我们必须实现Filter接口,重写三个方法,才能使用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();
}
}

 输出如下:

Filter过滤器的使用_java


举报

相关推荐

过滤器的使用(filter)

过滤器filter

Filter过滤器

过滤器-filter

【JavaWeb】Filter过滤器 的使用

【VUE】过滤器Filter

Vue过滤器filter

【笔记】过滤器filter

0 条评论