SpringBoot使用Aspect切面拦截打印请求参数示例代码

网友投稿 997 2022-12-27

SpringBoot使用Aspect切面拦截打印请求参数的示例代码

SpringBoot使用Aspect切面拦截打印请求参数的示例代码

AspectJ作为语言级别的AOP框架,功能相比于SpringAOP更加强大。SpringAOP旨在提供给RNJLed用户一个轻量级的AOP实现方案,它只能应用在SpringIOC容器中管理的bean。而AspectJ旨在提供给用户一个完整的AOP解决方案,它可以应用在所有的域对象中,下面给大家介绍SpringBoot使用Aspect切面拦截打印请求参数的代码。

引入依赖

org.springframework.boot

spring-boot-starter-aop

也用到了fastjson打印参数 , 如果引了就不需要(也可以根据自己的来打印)

com.alibaba

fastjson

1.2.15

LogAspect.java

import com.alibaba.fastjson.JSON;

import lombok.extern.slf4j.Slf4j;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.Signature;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.reflect.MethodSignature;

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.lang.reflect.Method;

/**

* @author zhipeih

* @date 2021/07/14

*/

@Slf4j

@Component

@Aspect //表示它是一个切面

public class LogAspect {

/**

*

* execution:改成自己要打印的控制器路径

* @param proceedingJoinPoint

* @return

* @throws Throwable

*/

@Around("execution(* com.example.*.controller.*.*(..)) ")

public Object handleControllerMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

//原始的HTTP请求和响应的信息

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request = attributes.getRequest();

Signature signature = proceedingJoinPoint.getSignature();

MethodSignature methodSignature = (MethodSignature)signature;

//获取当前执行的方法

Method targetMethod = methodSignature.getMethod();

//获取参数

Object[] objects = proceedingJoinPoint.getArgs();

//获取返回对象

Object object = proceedingJoinPoint.proceed();

StringBuilder sb = new StringBuilder(1000);

sb.append("-------------------------------------------------------------\n");

sb.append("Controller: ").append(targetMethod.getDeclaringClass().getName()).append("\n");

sb.append("Method : ").append(targetMethod.getName()).append("\n");

sb.append("Params : ").append(JSON.toJSONString(objects)).append("\n");

sb.append("URI : ").append(request.getRequestURI()).append("\n");

sb.append("URL : ").append(request.getRequestURL()).append("\n");

sb.append("Return : ").append(object).append("\n");

sb.append("-------------------------------------------------------------\n");

System.out.println(sb);

return proceedingJoinPoint.proceed();

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:快对app小程序(快应用 微信小程序)
下一篇:flutter词根(float的词根)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~