当前位置: 首页 > news >正文

SpringBoot 拦截请求打印日志

SpringBoot 拦截请求打印日志

import lombok.extern.slf4j.Slf4j;import cn.hutool.json.JSONUtil;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;@Slf4j
@Aspect
@Component
public class BusDealConf {@Around("@within(org.springframework.web.bind.annotation.RestController)" +"||@within(org.springframework.stereotype.Controller)")public Object around(ProceedingJoinPoint point) throws Throwable {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();log.info("----------------------------------------开始----------------------------------------");if (null != attributes) {HttpServletRequest request = attributes.getRequest();log.info("请求路径: {}", request.getRequestURI());log.info("请求方式: {}", request.getMethod());log.info("请求方法: {}", point.getSignature());log.info("请求参数: {}", JSONUtil.toJsonPrettyStr(getPara(point.getArgs())));}long t1 = System.currentTimeMillis();Object result = point.proceed(point.getArgs());long t2 = System.currentTimeMillis();//log.info("响应参数: {}", JSONUtil.toJsonPrettyStr(result));log.info("执行耗时: {}ms", t2 - t1);log.info("----------------------------------------结束----------------------------------------");return result;}private List<Object> getPara(Object[] objects) {return Arrays.stream(objects).filter(obj -> !(obj instanceof MultipartFile)&& !(obj instanceof HttpServletResponse)&& !(obj instanceof HttpServletRequest)).collect(Collectors.toList());}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 读书笔记--阅读费孝通先生一生学术历程的记录与感悟
  • docker基础知识-docker0网桥
  • [建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级
  • 对接后端download接口报未知异常错误
  • Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)
  • 牛客小白月赛99题解(BFS、欧拉筛、完全背包、离散化、树状数组、二分查找)
  • 【计算机网络】socket编程 几个网络命令
  • LeetCode 每日一题 2024/9/2-2024/9/8
  • 数据结构中抽象数据类型如何实现?
  • python实现RPC算法
  • Android 优雅封装Glide
  • Iceberg与SparkSQL整合DDL操作
  • el-table使用type=“expand”根据数据条件隐藏展开按钮
  • Ceph集群维护相关操作
  • 图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取
  • bootstrap创建登录注册页面
  • ES6之路之模块详解
  • fetch 从初识到应用
  • IOS评论框不贴底(ios12新bug)
  • Javascript设计模式学习之Observer(观察者)模式
  • JS实现简单的MVC模式开发小游戏
  • mysql 5.6 原生Online DDL解析
  • ucore操作系统实验笔记 - 重新理解中断
  • 从伪并行的 Python 多线程说起
  • 浏览器缓存机制分析
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何优雅地使用 Sublime Text
  • 微服务框架lagom
  • 线性表及其算法(java实现)
  • 追踪解析 FutureTask 源码
  • nb
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • PostgreSQL之连接数修改
  • Spring Batch JSON 支持
  • 数据可视化之下发图实践
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (1)Jupyter Notebook 下载及安装
  • (3)nginx 配置(nginx.conf)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Note)C++中的继承方式
  • (void) (_x == _y)的作用
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (面试必看!)锁策略
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)德国人的记事本
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Core 2.1路线图
  • .net wcf memory gates checking failed
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 中 GetProcess 相关方法的性能
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET8 动态添加定时任务(CRON Expression, Whatever)