SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印

简介: SpringBoot整合AOP整合aspectj实现面向切面编程实现参数接收和请求时间打印
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.joda.time.DateTimeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
/**
 * @author liu pei
 * @version 1.0.0
 * @ClassName AccessLogAspect.java
 * @Description TODO
 * @createTime 2023年10月10日 16:15:00
 */
 
@Aspect
@Component
public class AccessLogAspect {
    final static Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
 
 
    private static final ThreadLocal START_TIME = new ThreadLocal<>();
 
    @Pointcut("execution(public * com.jhxx.*.controller..*.*(..)) || execution(public * com.jhxx.*.controller..*.*(..))")
    public void invokeLog() {
    // do something
    }
 
    @Before("invokeLog()")
    public void doBefore(JoinPoint joinPoint) {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录下请求内容
        String args = Arrays.toString(joinPoint.getArgs());
        log.info(" Request URL : [{}, {}]", request.getMethod(), request.getRequestURL());
        log.info(" Request IP : [{}]", WebUtils.getIP(request));
        log.info(" Class : [{}] , Method : [{}()]", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
        log.info(" Request Param : {}", args);
        START_TIME.set(DateTimeUtils.currentTimeMillis());
    }
 
    @AfterReturning(returning = "ret", pointcut = "invokeLog()")
    public void doAfterReturning(Object ret) {
        // 处理完请求,返回内容
        String jsonStr = GsonUtils.objToJson(ret);
        log.info(" Response Body : {}", jsonStr.length() > 500 ? jsonStr.substring(0, 499) : jsonStr);
        log.info(" Response Time : {} ms ", (DateTimeUtils.currentTimeMillis() - START_TIME.get()));
        START_TIME.remove();
    }
}


相关文章
|
6天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
5天前
|
XML JavaScript 前端开发
springboot配合Freemark模板生成word,前台vue接收并下载【步骤详解并奉上源码】
springboot配合Freemark模板生成word,前台vue接收并下载【步骤详解并奉上源码】
|
6天前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
16 1
|
5天前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
5天前
|
Java
java使用AOP切面获取请求日志并记录
java使用AOP切面获取请求日志并记录
|
6天前
|
前端开发 Java 开发者
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
12 0
|
6天前
|
Java 应用服务中间件 微服务
Spring Boot可以同时处理多少请求?
Spring Boot的并发处理能力受硬件、JVM配置、嵌入式Tomcat的线程池(默认最大连接数8192,最大等待数100)、应用效率、系统架构和网络条件影响。开发阶段可能处理数百个并发,优化后在适合的硬件上可处理数千乃至上万并发。大型系统常结合负载均衡器。
23 2
|
6天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
26 0
|
6天前
|
Java 开发者 Spring
Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
【5月更文挑战第1天】Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
25 5
|
6天前
|
开发框架 Java 开发者
Spring Boot接收参数的多种方式
【4月更文挑战第20天】
13 0