服务器之家

服务器之家 > 正文

Java中使用Filter过滤器的方法

时间:2021-09-16 12:39     来源/作者:红旗下的小兵

Filter过滤器

着重记录下 public void doFilter(){} 方法参数:

(1) ServletRequest servletRequest 

请求reqeust;

(2)ServletResponse servletResponse 

响应response;

(3)FilterChain filterChain

参数 filterChain,有一个doFilter() 方法,调用这个方法,可以使程序继续往下走,执行后续代码,如果有多个过滤器,它会继续执行下一个过滤器逻辑(开发中会出现多个过滤器情况)。

例子(下边例子是在springboot项目中的)

使用过滤器,日志输出接口的响应时间
filter -> FilterLog.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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过滤器内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_42778001/article/details/118255399

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部