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


相关文章
|
6月前
|
人工智能 搜索推荐 API
AI编程平民化趋势:从昂贵工具到普惠服务的转变
近年来,AI编程工具加速平民化,价格大幅降低(如阿里云CodingPlan轻量版首月仅7.9元),推动开发门槛下降、生态繁荣。个人开发者、中小企业与教育领域广泛受益,市场呈现多样化、集成化、体验优化趋势。技术普惠正重塑软件开发未来。(238字)
|
10月前
|
SQL 监控 机器人
|
10月前
|
安全 Java 编译器
我们来说一下 synchronized 与 ReentrantLock 的区别
我是小假 期待与你的下一次相遇 ~
433 4
|
10月前
|
存储 Java Linux
Nacos注册中心
本文介绍Nacos的安装部署、整合Spring Cloud Alibaba注册中心及服务分级模型应用。涵盖下载启动、配置修改、多集群模拟等步骤,助力实现服务注册与高效治理。(238字)
|
10月前
|
边缘计算 运维 安全
工业互联网平台实践
工业互联网平台通过设备接入、边缘计算、数据分析与数字孪生等核心技术,实现制造全链路智能化。结合MES/ERP系统集成与工控安全体系,赋能生产协同、预测性维护与决策优化,推动智能制造高效、安全转型升级。
644 0
|
10月前
|
运维 监控 Serverless
函数计算FC:Serverless架构实战
本文深入解析阿里云函数计算FC,涵盖Serverless架构的免运维、按需付费、自动弹性三大优势,详解函数开发、触发器配置、性能优化与监控调试等核心环节,结合图片处理与数据管道实战案例,提供从入门到落地的完整指南,助力开发者高效构建低成本、高可用的分布式应用。
496 0
|
10月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。前者是跨模型的标准协议,实现多工具动态集成;后者是模型调用外部功能的机制。MCP构建通用连接桥梁,支持多模型、跨平台协作,具备高扩展性与解耦能力;Function Call则依赖特定模型,直接解析意图并调用函数。两者在企业级系统中可协同工作:模型通过Function Call识别意图,转为MCP标准请求调用工具,兼顾智能解析与生态扩展。未来将趋向融合,形成“模型解析-协议传输-工具执行”的统一范式。
|
开发工具 git 开发者
如何让现有的 Git 分支跟踪远程分支?
【8月更文挑战第15天】
2248 1
如何让现有的 Git 分支跟踪远程分支?
|
存储 算法 关系型数据库
数据库主键与索引详解
本文介绍了主键与索引的核心特性及其区别。主键具有唯一标识、数量限制、存储类型和自动排序等特点,用于确保数据完整性和提升查询效率;而索引通过特殊数据结构(如B+树、哈希)优化查询速度,适用于不同场景。文章分析了主键与索引的优劣、适用场景及工作原理,并对比两者在唯一性、数量限制、功能定位等方面的差异,为数据库设计提供指导。
|
机器学习/深度学习 人工智能 自然语言处理
详解:Poe AI国内版_国内使用Poe AI的最优选择!
Poe 的出现标志着 Quora 对 AI 和自然语言处理 (NLP) 技术的深入探索,预示着 AI 在我们日常生活中将扮演越来越重要的角色。
2147 13

热门文章

最新文章