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

简介: 111


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

免费使用

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

Java

运行代码复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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;


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

}

}



2 人点赞

2

油炸小波

2020-07-10 16:40

2147

0

举报

分享到:

注册 / 登录 语雀进行评论

1/614字

关于语雀使用帮助数据安全服务协议English快速注册

油炸小波

微服务技术栈

搜索Ctrl + J

首页

目录

3-MongoDB常用命令

4-MongoDB索引知识

5-MongoDB实战演练

MyBatis

1.常见配置

2.映射关系(1-1 1-n n-n)

3.分页

汇总

SpringBoot

使用归纳总结

@Configuration

无标题

SpringBoot使用汇总

@Inherited

1. 整合Logback,滚动记录+多文件

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

3. 打包

4. 不定参数入参

5.跨域处理

6.鉴权

源码

SpringSecurity

SpringCloud(2024)

SpringCloud(2025)

SpringCloud(2026)

Zookeeper

Adblocker


相关文章
|
4月前
|
人工智能 搜索推荐 API
AI编程平民化趋势:从昂贵工具到普惠服务的转变
近年来,AI编程工具加速平民化,价格大幅降低(如阿里云CodingPlan轻量版首月仅7.9元),推动开发门槛下降、生态繁荣。个人开发者、中小企业与教育领域广泛受益,市场呈现多样化、集成化、体验优化趋势。技术普惠正重塑软件开发未来。(238字)
|
10月前
|
Prometheus 监控 Kubernetes
自定义通过helm部署的prometheus+Grafana监控框架
本文基于Helm快速部署kube-prometheus-stack,通过自定义`custom-values.yaml`实现Prometheus与Grafana的精细化配置,涵盖资源限制、持久化存储、服务暴露、告警规则及仪表盘导入,支持K8s集群全方位监控,提升可观测性与运维效率。
705 0
|
8月前
|
SQL 监控 机器人
|
8月前
|
安全 Java 编译器
我们来说一下 synchronized 与 ReentrantLock 的区别
我是小假 期待与你的下一次相遇 ~
392 4
|
9月前
|
数据采集 弹性计算 运维
云服务诊断:一键定位异常,快速恢复业务
云服务诊断是阿里云推出的免费运维工具,提供“资源健康状态”和“问题诊断”两大功能。可精准监控每个实例的健康状况,支持一键全量诊断与常见问题场景快速排查,帮助用户迅速定位并修复ECS、SLB、EIP等资源异常,提升运维效率,保障业务稳定运行。
616 22
|
8月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。前者是跨模型的标准协议,实现多工具动态集成;后者是模型调用外部功能的机制。MCP构建通用连接桥梁,支持多模型、跨平台协作,具备高扩展性与解耦能力;Function Call则依赖特定模型,直接解析意图并调用函数。两者在企业级系统中可协同工作:模型通过Function Call识别意图,转为MCP标准请求调用工具,兼顾智能解析与生态扩展。未来将趋向融合,形成“模型解析-协议传输-工具执行”的统一范式。
|
8月前
|
人工智能 自然语言处理 安全
2025-2026智能客服选型推荐:主流方案实测与甄选
2025 年,AI Agent 技术的规模化落地与大模型的行业化适配,推动智能客服行业迈入“全链路价值协同 + 场景化主动服务”的成熟周期。中国电子技术标准化研究院数据显示,零售、金融、政务三大核心领域的智能客服渗透率已突破 65%,部分头部企业的 AI 服务占比更是超过 80%。对于企业而言,智能客服已不再是单纯的“成本优化工具”,更升级为串联售前引流、售中转化、售后复购的业务增长引擎,成为数字化转型的核心基础设施。
|
8月前
|
缓存 Java Nacos
@RefreshScope热更新原理
@RefreshScope通过组合@Scope(&quot;refresh&quot;)实现配置热更新,其核心是利用动态代理与缓存机制。标注该注解的Bean会被放入自定义refresh scope缓存,配置变更时清空缓存,触发Spring重新创建Bean实例,从而重新注入最新配置值,实现毫秒级动态刷新。
|
开发工具 git 开发者
如何让现有的 Git 分支跟踪远程分支?
【8月更文挑战第15天】
2108 1
如何让现有的 Git 分支跟踪远程分支?
|
存储 算法 关系型数据库
数据库主键与索引详解
本文介绍了主键与索引的核心特性及其区别。主键具有唯一标识、数量限制、存储类型和自动排序等特点,用于确保数据完整性和提升查询效率;而索引通过特殊数据结构(如B+树、哈希)优化查询速度,适用于不同场景。文章分析了主键与索引的优劣、适用场景及工作原理,并对比两者在唯一性、数量限制、功能定位等方面的差异,为数据库设计提供指导。

热门文章

最新文章