整合切面,参数拦截+过滤

简介: 该类基于Spring AOP实现请求参数日志拦截,自动记录请求来源、URL、方式、方法及入参,并统计接口耗时。通过@Pointcut拦截controller层请求,结合@Before、@After与@Around实现前后置通知,便于调试与监控,日志输出至指定文件,支持后续扩展存储或分析。

package cn.zhicall.web.aspect;

import com.zhicall.framework.core.common.utils.log.LogProxy;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**

  • @author hebo@zhicall.cn
  • @version 1.0
  • @date 2020/6/5 0005 10:48
  • @Desc 入参前置拦截,借助Spring-AOP
    */
    @Component
    @Aspect
    public class RequestParamsAspect {

    protected final Logger logger = LogProxy.getLogger("REQUEST_PARAM_LOG");

    //为了记录执行时间 方便调试 如果不需要可以去掉
    ThreadLocal startTime = new ThreadLocal<>();

    /*

    • 这样可以扫描controller路径下面全部
    • 我这里路径是com.test.controller
    • .user(包)
    • UserController...
    • .admin(包)
    • AdminController...
      /
      @Pointcut("execution(public
      cn.web.controller...*(..))")
      public void pointCut() {}

      /**

    • 参数进行限制或者拦截(后续可数据库存储或ELK)
    • @param joinPoint
    • @throws Throwable
      */
      @Before("pointCut()")
      public void before(JoinPoint joinPoint) throws Throwable {
      ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
      HttpServletRequest request = attributes.getRequest();
      logger.info("请求来源:" + request.getRemoteAddr());
      logger.info("请求URL:" + request.getRequestURL().toString());
      logger.info("请求方式:" + request.getMethod());
      logger.info("响应方法:" + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
      logger.info("请求参数:" + Arrays.toString(joinPoint.getArgs()));

      startTime.set(System.currentTimeMillis());
      }

      /**

    • 环绕执行(暂未使用)
    • 定义需要匹配的切点表达式,同时需要匹配参数
    • @param pjp
    • @return
    • @throws Throwable
      */
      @Around("pointCut()")
      public Object around(ProceedingJoinPoint pjp) throws Throwable {
      //这句必须有 往下执行方法
      Object result = pjp.proceed();
      logger.info("耗时(毫秒):" + (System.currentTimeMillis() - startTime.get()));
      return result;
      }

      /**

    • 后置通知
    • 在方法执行后执行 可以打印返回的数据 判断数据是否是自己需要的或脱敏
    • @param point
      */
      @After("pointCut()")
      public void after(JoinPoint point) {
      if (startTime.get() == null) {
       startTime.set(System.currentTimeMillis());
      
      }
      logger.info("耗时(毫秒):" + (System.currentTimeMillis() - startTime.get()));
      // 清理线程池
      startTime.remove();
      }
      }
相关文章
|
5月前
|
JSON 数据格式
不定参数入参
支持多种参数传递方式:非JSON格式可通过@RequestBody、@RequestParam或直接传参;JSON格式支持JSONObject解析或封装对象接收,结合@Valid实现参数校验,提升接口安全性与可维护性。(238字)
|
5月前
|
安全 API UED
2026 年起 WhatsApp 消息计费将调整!企业必看!
WhatsApp 将于 2026 年 1 月起调整全球消息计费规则:法国、埃及的营销类消息价格大幅下调(降幅近40%),美加的验证与通知类消息也小幅降价;但印度 Marketing 消息价格上涨约10%。出海企业需根据区域成本变化,重新评估通信预算与触达策略,避免隐性成本累积。
1166 0
|
5月前
|
Java 大数据 Apache
Excel工具-HUTOOL-输出Excel
Hutool基于Apache POI封装了Excel读写功能,提供ExcelWriter和BigExcelWriter类,支持写出List、Map、Bean等数据类型到Excel,可自定义样式、多sheet操作,并解决大数据量导出时的内存溢出问题,适用于文件导出、客户端下载等场景。
|
5月前
|
Apache
Excel工具-HUTOOL-读取Excel
基于Hutool和Apache POI,封装Excel读取工具,支持xls/xlsx格式。可读取为List、Map或Bean,提供Sax模式(Excel03SaxReader/Excel07SaxReader)高效处理大文件,避免内存溢出,适用于海量数据流式读取。
|
5月前
|
人工智能 算法 PyTorch
算力不一定越猛越好:聊聊 AI 设备的低功耗算力优化这条现实之路
算力不一定越猛越好:聊聊 AI 设备的低功耗算力优化这条现实之路
311 10
|
5月前
|
人工智能 自然语言处理 搜索推荐
Geo优化实战:AI最爱抓取的“双核四驱”结构化内容范式
Geo专家于磊首创“两大核心+四轮驱动”Geo优化体系,倡导人性化内容与可信知识库构建,通过E-E-A-T验证、结构化标签、精准意图匹配与权威引用,助力企业在AI时代提升搜索信任度与获客效率。
279 3
|
5月前
|
自然语言处理 安全 Java
Spring Boot中集成Lucence
Lucene是Apache开源的全文检索库,通过分词、建立索引实现高效搜索。本文介绍其原理,并在Spring Boot中集成,实现中文分词、高亮显示等实战功能,适用于文件搜索、内容检索等场景。
|
存储 人工智能 自然语言处理
Pandas数据应用:自然语言处理
本文介绍Pandas在自然语言处理(NLP)中的应用,涵盖数据准备、文本预处理、分词、去除停用词等常见任务,并通过代码示例详细解释。同时,针对常见的报错如`MemoryError`、`ValueError`和`KeyError`提供了解决方案。适合初学者逐步掌握Pandas与NLP结合的技巧。
562 20
|
11月前
|
人工智能 Linux 计算机视觉
GitHub 开源热搜!10.7k  star, MagicAnimate,让照片秒变动画短片!
MagicAnimate 是由新加坡国立大学与字节跳动团队开发的静态图像动画工具,基于视频扩散模型与时序注意力模块,可实现高保真一致动画。用户只需上传一张照片和动作视频/DensePose 数据,即可生成高质量动画,效率提升 50%。项目在 GitHub 上获得 11.1k 星,支持多 GPU 推理、模型替换及跨平台部署,适用于短视频创作、在线教育、营销广告等场景。其优势在于流畅度高、细节还原精准,是目前最强的人像动画技术之一。
726 0
|
人工智能 并行计算 算法
企业内训|智能驾驶与智能座舱技术——某汽车厂商
本课程系统讲解智能汽车两大核心领域技术架构与实现路径。课程涵盖智能驾驶感知层(激光雷达/毫米波雷达/视觉融合)、决策规划(A*/RRT算法与端到端模型)及高精地图定位(SLAM与无图方案),解析智能座舱系统演化(IVI/AR-HUD多屏交互)及硬件软件架构(高通芯片选型/QNX/鸿蒙车机)。
378 15

热门文章

最新文章