Java中使用Filter过滤器的方法

网友投稿 237 2023-01-02

Java中使用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;

SXNfVAwhLimport org.springframework.SXNfVAwhLstereotype.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();

}

}

输出如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:提供api接口网站(API网站)
下一篇:祥鼎国际快递物流查询单号(祥鼎国际快递公司电话)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~