经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringBoot实现过滤器拦截器的耗时对比
来源:jb51  时间:2022/6/27 14:14:06  对本文有异议

三种方式 下面为大家一一对应

  • 过滤器的方式
  • 拦截器的方式

过滤器的方式

这种方式简单点 但是可配置性不高

注意:一定得扫描到spring容器中

创建一个类 实现 filter接口

  • init:该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数FilterConfig可以获得filter的初始化参数;
  • doFilter:可以对request和response进行<u>预处理</u>其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。
  • destroy():该方法在容器销毁对象前被调用。
  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.stereotype.Component;
  4. import javax.servlet.*;
  5. import javax.servlet.http.HttpServletRequest;
  6. import java.io.IOException;
  7.  
  8. @Component
  9. public class LogFilter implements Filter {
  10.  
  11. private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class);
  12.  
  13. @Override
  14. public void init(FilterConfig filterConfig) throws ServletException {
  15.  
  16. }
  17.  
  18. @Override
  19. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  20. // 打印请求信息
  21. HttpServletRequest request = (HttpServletRequest) servletRequest;
  22. LOG.info("------------- LogFilter 开始 -------------");
  23. LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
  24. LOG.info("远程地址: {}", request.getRemoteAddr());
  25.  
  26. long startTime = System.currentTimeMillis();
  27. filterChain.doFilter(servletRequest, servletResponse);
  28. LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
  29. }
  30. }

结果

总结

1.过滤器用来实现通用的功能,减少代码冗余,提高可维护性;

2.一个过滤器可以配置给多个资源使用(编码过滤器);

3.一个资源也可以配置多个过滤器,按照配置顺序调用。

拦截器的方式

如果不懂 请先看了 介绍再来

拦截器的介绍

话不说多 直接上代码

创建拦截器

  1. /**
  2. * 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login
  3. * @author : look-word
  4. * 2022-06-26 13:55
  5. **/
  6. @Component
  7. public class LogInterceptor implements HandlerInterceptor {
  8. private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);
  9.  
  10. @Override
  11. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  12. // 打印请求信息
  13. LOG.info("------------- LogInterceptor 开始 -------------");
  14. LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
  15. LOG.info("远程地址: {}", request.getRemoteAddr());
  16.  
  17. long startTime = System.currentTimeMillis();
  18. request.setAttribute("requestStartTime", startTime);
  19. return true;
  20. }
  21.  
  22. @Override
  23. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  24. long startTime = (Long) request.getAttribute("requestStartTime");
  25. LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
  26. }
  27. }

注册拦截器

把我们的拦截器 注册到 拦截器链中

  1. /**
  2. * @author : look-word
  3. * 2022-06-26 14:03
  4. **/
  5. @Configuration
  6. public class SpringMvcConfig implements WebMvcConfigurer {
  7.  
  8. @Resource
  9. private LogInterceptor logInterceptor;
  10. /**
  11. * 注册拦截器
  12. * @param registry
  13. */
  14. @Override
  15. public void addInterceptors(InterceptorRegistry registry) {
  16. registry
  17. .addInterceptor(logInterceptor)
  18. .addPathPatterns("/**")// 对那些接口拦截
  19. .excludePathPatterns("/login");// 对哪些接机口放行
  20. WebMvcConfigurer.super.addInterceptors(registry);
  21. }
  22. }

测试结果

以上就是SpringBoot实现过滤器拦截器的耗时对比的详细内容,更多关于SpringBoot过滤器拦截器的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号