本篇内容介绍了“SpringBoot实现过滤器拦截器的耗时实例对比分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!过滤器的方式这种方式简单
本篇内容介绍了“SpringBoot实现过滤器拦截器的耗时实例对比分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
这种方式简单点 但是可配置性不高
创建一个类 实现 filter接口
init:该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数FilterConfig可以获得filter的初始化参数;
doFilter:可以对request和response进行<u>预处理</u>
。其中FilterChain可以将处理后的
request和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁对象前被调用。
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;@Componentpublic class LogFilter implements Filter { private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 打印请求信息 HttpServletRequest request = (HttpServletRequest) servletRequest; LOG.info("------------- LogFilter 开始 -------------"); LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod()); LOG.info("远程地址: {}", request.getRemoteAddr()); long startTime = System.currentTimeMillis(); filterChain.doFilter(servletRequest, servletResponse); LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); }}
结果
过滤器用来实现通用的功能,减少代码冗余,提高可维护性;
一个过滤器可以配置给多个资源使用(编码过滤器);
一个资源也可以配置多个过滤器,按照配置顺序调用。
如果不懂 请先看了 介绍再来
拦截器的介绍
话不说多 直接上代码
创建拦截器
@Componentpublic class LogInterceptor implements HandlerInterceptor { private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 打印请求信息 LOG.info("------------- LogInterceptor 开始 -------------"); LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod()); LOG.info("远程地址: {}", request.getRemoteAddr()); long startTime = System.currentTimeMillis(); request.setAttribute("requestStartTime", startTime); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long startTime = (Long) request.getAttribute("requestStartTime"); LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); }}
注册拦截器
把我们的拦截器 注册到 拦截器链中
@Configurationpublic class springMVCConfig implements WEBmvcConfigurer { @Resource private LogInterceptor logInterceptor; @Override public void addInterceptors(InterceptorReGIStry registry) { registry .addInterceptor(logInterceptor) .addPathPatterns("/**")// 对那些接口拦截 .excludePathPatterns("/login");// 对哪些接机口放行 WebMvcConfigurer.super.addInterceptors(registry); }}
测试结果
“SpringBoot实现过滤器拦截器的耗时实例对比分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
--结束END--
本文标题: SpringBoot实现过滤器拦截器的耗时实例对比分析
本文链接: https://lsjlt.com/news/342082.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0