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; 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过滤器的方法的文章就介绍到这了,更多相关Filter过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot项目启动过程动态修改接口请求路径的解决方案
在SpringBoot服务整合过程中,遇到了多个服务中相同RequestMapping路径导致的启动问题,解决方案是通过修改RequestMappingHandlerMapping类的getMappingForMethod方法,本文给大家介绍SpringBoot修改接口请求路径的解决方案,感兴趣的朋友一起看看吧2024-09-09MyBatis批量更新(update foreach)报错问题
这篇文章主要介绍了MyBatis批量更新(update foreach)报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-08-08idea查看properties中文变成unicode码的解决方案
这篇文章主要介绍了idea查看properties中文变成unicode码的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-06-06
最新评论