6.addInterceptors添加拦截器

registry.addInterceptor(BeanKit.getOfType(DebugInterceptor.class));

实现debug拦截器

@Slf4j
@Aspect
@Component
public class DebugInterceptor extends HandlerInterceptorAdapter {private ThreadLocal<Long> startTime = ThreadLocal.withInitial(System::nanoTime);private ThreadLocal<Signature> signature = ThreadLocal.withInitial(() -> null);private ThreadLocal<Object[]> paramsCache = ThreadLocal.withInitial(() -> null);private ThreadLocal<Object> resultCache = ThreadLocal.withInitial(() -> null);@Pointcut("execution(public * zool.firefly.controller.*.*(..))")public void resultAop() {}@Around("resultAop()")@SneakyThrowspublic Object resultAround(ProceedingJoinPoint pjp) {val result = pjp.proceed();resultCache.set(result);return result;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {startTime.set(System.nanoTime());paramsCache.set(new Object[]{request.getParameterMap()});return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {StringBuilder str = new StringBuilder();str.append("\n===================== DebugInterceptor =====================");str.append("\nRemote   IP        : ").append(WebKit.getClientIP());str.append("\nRequest  Method    : ").append(request.getMethod());str.append("\nRequest  URL       : ").append(request.getRequestURI()).append(StringUtils.isEmpty(request.getQueryString()) ? "" : "?" + request.getQueryString());str.append("\nAction   Signature : ").append(Optional.ofNullable(signature.get()).map(Object::toString).orElse("Empty"));str.append("\nRequest  Params    : ");Object[] param = paramsCache.get();if (param != null && param.length == 1 && param[0] instanceof Map) {str.append(JSON.toJSONString(param[0]));} else {Object[] params = Optional.ofNullable(paramsCache.get()).orElse(new Object[]{});for (int i = 0; i < params.length; i++) {Object obj = params[i];// 需要保证类直接继承Object 并且没有实现任何接口 才能用JSON序列化boolean isPlanObject = Optional.ofNullable(obj).map(o -> o.getClass().getSuperclass().equals(Object.class)&& !o.getClass().isArray()&& o.getClass().getInterfaces().length == 0).orElse(true);str.append(i == 0 ? "[" : "\n                     [").append(i).append("] => ").append(isPlanObject ? JSON.toJSONString(obj) : String.valueOf(obj));}}str.append("\nResponse Status    : ").append(response.getStatus());//TODO 添加返回结果str.append("\nHandle   Time      : ").append(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime.get())).append("ms");str.append("\n============================================================");log.info(str.toString());signature.remove();paramsCache.remove();resultCache.remove();}
}

访问时的效果:

自定义拦截器继承HandlerInterceptorAdapter实现

preHandle,postHandle,afterCompletion前置拦截,后置拦截,最终拦截

spring boot 项目重新搭建----------mvc配置:拦截器相关推荐

  1. 如何把Spring Boot 项目变成一个XML配置的Spring项目

    现在大家都追赶新的技术潮流,我来逆行一下. 其实Spring Boot 隐藏了大量的细节,有大量的默认配置,其实通过xml配置的方式也可以达到和Spring Boot一样的效果. Profile 在S ...

  2. springboot 控制台输出错误信息_高级码农Spring Boot实战进阶之过滤器、拦截器的使用...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

  3. Spring Boot项目快速搭建

    实验要求及目的: (1)掌握ApplicationContext容器使用属性setter方法注入的实现: (2)了解Spring的概念和优点: (3)熟悉Spring中的IOC和DI: 实验环境:   ...

  4. 【Spring Boot】 过滤器、监听器、拦截器的使用

    概念和使用场景 监听器 listener是servlet规范中定义的一种特殊类.用于监听servletContext.HttpSession和servletRequest等域对象的创建和销毁事件. 实 ...

  5. 【Spring Boot项目】个人在线音乐播放器

    文章目录 1. 项目简介 2. 数据库表的设计 3. 拦截器及返回数据格式 4. 注册功能 5. 登陆功能 6. 音乐列表相关业务 6.1 查询功能 6.2 上传音乐 6.3 播放音乐 6.4 收藏音 ...

  6. 怎样把一个项目加入微服务器,构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  7. Myeclipse下使用Maven搭建spring boot项目(第二篇)

    现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来. 一.在pom.xml中引入spring-boot-start-parent,spring官方的叫st ...

  8. springboot controller访问不到_构建微服务:快速搭建Spring Boot项目

    Spring Boot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...

  9. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...

最新文章

  1. 结对开发--求二维数组的最大子数组
  2. 如何使用BigDecimal?
  3. __doPostBack实现updatepanel的局部更新
  4. ubuntu 16.04 配置Python2.7 和 Python3.5 同时调用OpenCV
  5. iOS开发学无止境 - NSFileManager文件操作的十个小功能
  6. C++中,引用作为函数参数
  7. 23.3. 操作系统监控需求
  8. 需要凭据_PE管件连接时有哪些需要注意的地方
  9. bzoj 3394: [Usaco2009 Jan]Best Spot 最佳牧场(floyd)
  10. 7-8 统计工龄 (20 分)
  11. 如何更方便地将谷歌翻译导入到Goldendict
  12. php 怎么把数组按拼音,php实现数组按拼音顺序排序的方法
  13. 厦门理工学院计算机毕业要求,计算机教学中心-厦门理工学院教务处.PDF
  14. 多道程序 cpu利用率
  15. Java异或性能测试速度为2.5GiB/s
  16. tabbar 图片太大了怎么办_设置TabBar分栏控制器上图片的大小问题
  17. 响应式布局的个人博客
  18. lol祖安服务器维护,触目惊心 被演员与代练所“支配”的英雄联盟
  19. Joint Discriminative and Generative Learning for Person Re-identification 论文翻译
  20. 网络上游戏制作相关学习站点的网址!

热门文章

  1. Android 用代码查看本机保存的Wifi密码
  2. 分享:如何分解质因数之python实现(例如90分解质因数:90=2x3x3x5)
  3. linux常用命令——ls
  4. aruba无线ap认证服务器,Aruba无线AP及AC配置.doc
  5. 村路安防工程建设展开 未来投入将进一步加大
  6. 银河麒麟最新V10系统下载链接
  7. java path 注解_Java内置系统注解和元注解
  8. MySQL数据库综合运用——快递管理系统
  9. 深入理解ElasticSearch(原书第2版)
  10. seo是做什么-程绩