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

简介: 该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();
}

}

相关文章
|
3月前
|
监控 安全 数据安全/隐私保护
泄密事件高发频发,DLP/EDR/VDI等传统安全手段失效了吗?
近期台积电、华为等企业频发员工手机偷拍泄密事件,暴露传统DLP、EDR等安全体系在应对屏幕拍照泄露时的盲区。尽管部署多重防护,仍难阻“人”的主动泄密。新型“电-光-电”跨媒介隐形水印技术应运而生,通过无感嵌入、精准溯源,有效震慑内部泄密行为。该技术可与DLP、EDR协同,补齐“最后一公里”防护短板,构建事前预防、事中控制、事后溯源的纵深防御体系。安全无银弹,唯有传统手段与创新科技联动,方能筑牢数据防线。
167 26
|
2月前
|
机器学习/深度学习 人工智能 测试技术
DeepSeek-R1 与 OpenAI o3 的启示:Test-Time Compute 技术不再迷信参数堆叠
2025年,AI告别“参数内卷”,迎来Test-Time Compute范式革命。模型不再依赖训练时的“烘焙”智能,而是通过推理阶段的思考、验证与优化,在数学、逻辑等任务中实现质的飞跃。DeepSeek-R1与OpenAI o3证明:让小模型“多想一会儿”,效果远超盲目堆参数。Best-of-N+验证机制让普通开发者也能复现高精度推理,算力成本可控。未来AI产品核心不再是模型大小,而是可配置的“Inference Budget”。
216 14
DeepSeek-R1 与 OpenAI o3 的启示:Test-Time Compute 技术不再迷信参数堆叠
|
2月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过YAML配置表达式规则。支持AST语法树解析、上下文构建与动态执行,提供脚本缓存、别名映射、指令重写等扩展能力,适用于灵活的业务逻辑解耦与动态化控制。
|
2月前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
2月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题。通过`thread`定位高耗能线程,`watch`监控方法调用与异常,结合`jad`反编译与`redefine`实现热更新,无需重启服务即可修复代码,提升线上问题响应效率。适用于SpringBoot + JDK8环境。
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
730 59
|
8月前
|
机器学习/深度学习 搜索推荐 算法
跨平台电商整合:API如何帮助打通多店铺运营
在多平台电商运营中,商家常面临库存不同步、订单分散等问题。API技术作为“数据管道”,可通过标准化协议打通系统,实现库存同步、订单整合与智能分配,大幅提升效率。例如,某服装企业借助API将订单处理时间缩短70%。实施API有云端SaaS和定制开发两种方案,分别适合中小商家与复杂业务流。未来,随着GraphQL等新技术发展,API将进一步支持智能库存预测、跨平台用户画像及自动化营销联动。总之,API如同电商的“神经网络”,是提升运营效率与构建竞争壁垒的核心战略资产。
205 0
|
运维 前端开发 数据处理
浅谈领域驱动在前端的应⽤
领域驱动是⼀种思想,不仅可以应⽤于软件开发,也没有绝对的开发规范,适合⾃⼰的业务和团队背景就好,我们不是为了应⽤⽽应⽤,⽽是为了解决问题。
|
运维 监控 网络安全
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第3天】在本文中,我们将探讨如何通过编写简单的Python脚本来优化和自动化常见的系统运维任务。文章将展示具体的代码示例,并解释如何在真实环境中应用这些脚本以提升效率和减少人为错误。
310 6
|
开发者
2024 乘风者计划全新启航!快来加入吧!
 2021年,阿里云开发者社区焕新升级,重磅推出“乘风者计划”!诚邀四海技术博主入驻社区,泼墨云间,书写天地。入驻社区,即可享丰厚权益! 新的一年,乘风者计划重磅升级!
251929 81