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

简介: 该Java代码实现了一个基于Spring AOP的切面,用于拦截Controller层请求,记录请求来源、URL、方式、参数及响应耗时等信息,支持后续日志存储与分析。

Java

运行代码复制代码

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

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();

}

}


相关文章
|
存储 机器学习/深度学习 前端开发
通义灵码的技术架构
通义灵码的技术架构
|
20天前
|
安全 应用服务中间件 网络安全
2026年OpenClaw Docker生产环境部署指南:附阿里云1分钟安装OpenClaw+单机架构全流程
2026年,由奥地利开发者Peter Steinberger主导开发的OpenClaw AI执行引擎(曾用名Clawdbot、Moltbot)凭借“从给建议到做事情”的核心能力爆火开源领域,GitHub星标数突破18.6万,成为全球增速最快的开源项目之一。与传统对话式AI不同,OpenClaw定位“本地运行、可自托管的数字员工”,支持接入Claude、GPT、Ollama等主流大模型,兼容钉钉、飞书等十余种通讯渠道,通过技能插件无限扩展能力边界,覆盖办公自动化、代码辅助、跨应用协同等全场景,且基于MIT协议开源,支持免费使用与私有化部署。
1864 1
|
JSON Java 数据格式
RestTemplate请求UnknownContentTypeException:no suitable HttpMessageConverter异常
RestTemplate请求UnknownContentTypeException:no suitable HttpMessageConverter异常
708 0
|
18天前
|
人工智能 机器人 开发工具
2026年零基础云上及Docker本地部署OpenClaw(Clawdbot) 配置飞书机器人指南,也可集成Telegram、Discord(附避坑攻略)
2026年,OpenClaw(中文名为“数字龙虾”)凭借开源免费、灵活扩展的特性,成为AI助手领域的黑马,GitHub星标飙升至25万+,全球数十万开发者加入其生态。它不仅能实现对话交互,还能主动执行文件处理、自动化任务、多平台联动等复杂操作,堪称24小时在线的“私人AI管家”。但很多用户卡在部署环节——手动配置依赖、API密钥、渠道对接等步骤繁琐,非技术人员难以驾驭。
1409 0
|
6月前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
364 5

热门文章

最新文章