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

简介: 该Java代码使用Spring AOP实现Web请求日志切面,自动记录请求来源、URL、方式、方法、参数及耗时。通过@Pointcut定义切入点,结合@Before、@After和@Around注解实现前置、后置与环绕通知,便于统一监控和管理控制器层的请求信息,适用于日志收集与性能监控场景。(237字)

Java
运行代码
复制代码

package cn.zhicall.web.aspect;

/*
 *    这样可以扫描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();
}

}

相关文章
|
机器学习/深度学习 存储 算法
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型(三)
I2A、MBMF、MVE、DMVE…你都掌握了吗?一文总结强化学习必备经典模型
1273 0
|
8月前
|
SQL 人工智能 自然语言处理
Qoder @database功能上线!自动关联数据库 Schema,后端 AI Coding 效率拉满
Qoder是JetBrains平台唯一深度支持“数据库原生感知”的AI编程插件,内置@database能力,可将IDE中的数据库连接直接转化为AI上下文,实现精准SQL生成、架构评审与数据模拟。无需手动复制DDL,解决AI因缺乏表结构导致的“乱写代码”问题,真正闭环数据库开发流程,提升研发效率。
1747 1
Excel工具-HUTOOL-读取Excel
Hutool提供ExcelReader封装,支持读取Excel为Map、Bean或列表。针对大文件,提供Excel03SaxReader和Excel07SaxReader,基于SAX模式避免内存溢出,支持按行处理数据,适用于大数据量的高效读取。
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
906 59
|
9月前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
9月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题。通过`thread`定位高耗能线程,`watch`监控方法调用与异常,结合`jad`反编译与`redefine`实现热更新,无需重启服务即可修复代码,提升线上问题响应效率。适用于SpringBoot + JDK8环境。
|
9月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过YAML配置表达式规则。支持AST语法树解析、上下文构建与动态执行,提供脚本缓存、别名映射、指令重写等扩展能力,适用于灵活的业务逻辑解耦与动态化控制。
|
数据库 索引
索引命名规范
本文介绍了数据库中不同类型的索引命名规则:主键索引命名为pk_字段名,唯一索引命名为uk_字段名,普通索引命名为idx_字段名。pk表示主键,uk表示唯一键,idx表示索引。
1336 7
|
人工智能 JSON 数据格式
VTJ 上线 AI 识别 Sketch 和 Figma 设计稿
VTJ的AI助手支持通过识别Sketch和Figma设计稿的元数据,高精度还原设计图。用户可使用官方插件导出json格式的元数据文件。对于Sketch,下载并安装vtj-sketch-plugin后,选中图层导出;Figma则需安装vtj-figma-plugin,通过插件完成元数据导出。最后,在VTJ设计器中上传json文件,借助AI实现设计图的高效还原。
599 0

热门文章

最新文章