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


相关文章
|
8月前
|
Prometheus 监控 Kubernetes
自定义通过helm部署的prometheus+Grafana监控框架
本文基于Helm快速部署kube-prometheus-stack,通过自定义`custom-values.yaml`实现Prometheus与Grafana的精细化配置,涵盖资源限制、持久化存储、服务暴露、告警规则及仪表盘导入,支持K8s集群全方位监控,提升可观测性与运维效率。
612 0
|
6月前
|
SQL 监控 机器人
|
6月前
|
运维 监控 Serverless
函数计算FC:Serverless架构实战
本文深入解析阿里云函数计算FC,涵盖Serverless架构的免运维、按需付费、自动弹性三大优势,详解函数开发、触发器配置、性能优化与监控调试等核心环节,结合图片处理与数据管道实战案例,提供从入门到落地的完整指南,助力开发者高效构建低成本、高可用的分布式应用。
311 0
|
开发工具 git 开发者
如何让现有的 Git 分支跟踪远程分支?
【8月更文挑战第15天】
1994 1
如何让现有的 Git 分支跟踪远程分支?
|
存储 网络性能优化 网络安全
Hyper-V云桌面优化的设置指南
这份《Hyper-V云桌面优化设置指南》涵盖了硬件、虚拟机配置、网络、安全及高级配置的优化建议。硬件方面,确保CPU支持虚拟化并合理分配资源,使用SSD和VHDX格式提升存储性能;虚拟机配置上,优化内存、处理器和硬盘设置,并安装Hyper-V集成服务;网络优化包括虚拟交换机配置、适配器调整及QoS策略;安全性设置涵盖防火墙、端口管理和加密;高级配置如显卡直连和实时迁移进一步提升性能。这些措施能显著提高Hyper-V云桌面的效率与稳定性。
|
机器学习/深度学习 人工智能 算法
【DSW Gallery】PAI-DSW快速入门
PAI-DSW是一款为AI开发者量身定制的云端机器学习交互式开发IDE,随时随地开启Notebook快速读取数据、开发算法、训练及部署模型。本文介绍如何快速上手PAI-DSW。
【DSW Gallery】PAI-DSW快速入门
|
开发工具
新人乘风者礼品兑换指南
仅限2023年11月15日(含11月15日)后入驻博主用于兑换礼品,此前完成入驻的博主按原邮寄方式进行。
4890 9
|
前端开发 JavaScript Java
全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)
全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)
1679 0
全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)
|
Web App开发 编解码 监控
如何在VUE中播放海康威视RTSP/RTMP/ISC平台/NVR视频流?延迟低于300毫秒?
近期在做摄像头监控视频在网页中播放的工作,现在大部分摄像头厂商如海康威视、大华、华为等都支持标准的RTSP协议,RTSP协议的优势是实时性高、流畅度度高,同时支持H.265和H.264,清晰度也更高,对于要求比较高的安防、交通等领域很适合。
1515 0
如何在VUE中播放海康威视RTSP/RTMP/ISC平台/NVR视频流?延迟低于300毫秒?
|
JavaScript 前端开发 安全
Hsa-Mbs开发维护文档(上)
在分类目录下就可以添加相应的模块了,模块按复杂程度可分为单功能模块和多功能模块,不同类型模块目录结构有所不同。
1227 0