這篇文章主要介紹“SpringBoot如何使用Aspect切面攔截打印請求參數”,在日常操作中,相信很多人在SpringBoot如何使用Aspect切面攔截打印請求參數問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringBoot如何使用Aspect切面攔截打印請求參數”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
AspectJ作為語言級別的AOP框架,功能相比于SpringAOP更加強大。SpringAOP旨在提供給用戶一個輕量級的AOP實現方案,它只能應用在SpringIOC容器中管理的bean。而AspectJ旨在提供給用戶一個完整的AOP解決方案,它可以應用在所有的域對象中,下面給大家介紹SpringBoot使用Aspect切面攔截打印請求參數的代碼。
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
也用到了fastjson打印參數 , 如果引了就不需要(也可以根據自己的來打印)
<!-- 添加fastjson 支持 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency>
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();
}
}到此,關于“SpringBoot如何使用Aspect切面攔截打印請求參數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。