SpringBoot使用Aspect切面攔截打印請(qǐng)求參數(shù)的示例代碼
AspectJ作為語(yǔ)言級(jí)別的AOP框架,功能相比于SpringAOP更加強(qiáng)大。SpringAOP旨在提供給用戶一個(gè)輕量級(jí)的AOP實(shí)現(xiàn)方案,它只能應(yīng)用在SpringIOC容器中管理的bean。而AspectJ旨在提供給用戶一個(gè)完整的AOP解決方案,它可以應(yīng)用在所有的域?qū)ο笾?,下面給大家介紹SpringBoot使用Aspect切面攔截打印請(qǐng)求參數(shù)的代碼。
引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
也用到了fastjson打印參數(shù) , 如果引了就不需要(也可以根據(jù)自己的來(lái)打印)
<!-- 添加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 //表示它是一個(gè)切面
public class LogAspect {
/**
*
* execution:改成自己要打印的控制器路徑
* @param proceedingJoinPoint
* @return
* @throws Throwable
*/
@Around("execution(* com.example.*.controller.*.*(..)) ")
public Object handleControllerMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//原始的HTTP請(qǐng)求和響應(yīng)的信息
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Signature signature = proceedingJoinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature)signature;
//獲取當(dāng)前執(zhí)行的方法
Method targetMethod = methodSignature.getMethod();
//獲取參數(shù)
Object[] objects = proceedingJoinPoint.getArgs();
//獲取返回對(duì)象
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();
}
}
到此這篇關(guān)于SpringBoot使用Aspect切面攔截打印請(qǐng)求參數(shù)的文章就介紹到這了,更多相關(guān)SpringBoot打印請(qǐng)求參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java輸入處理的常見(jiàn)錯(cuò)誤小結(jié)
在?Java?編程中,輸入處理是一個(gè)基礎(chǔ)但又復(fù)雜的任務(wù),尤其是在涉及到與用戶交互時(shí),本文將對(duì)?Java?輸入處理的基本機(jī)制進(jìn)行詳細(xì)解析,需要的可以了解下2024-11-11
spring data jpa 查詢自定義字段,轉(zhuǎn)換為自定義實(shí)體方式
這篇文章主要介紹了spring data jpa 查詢自定義字段,轉(zhuǎn)換為自定義實(shí)體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java中二叉樹(shù)的建立和各種遍歷實(shí)例代碼
這篇文章主要介紹了Java中二叉樹(shù)的建立和各種遍歷實(shí)例代碼,涉及樹(shù)節(jié)點(diǎn)的定義,后序遍歷,層序遍歷,深度優(yōu)先和廣度優(yōu)先等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
SpringMVC框架post提交數(shù)據(jù)庫(kù)出現(xiàn)亂碼解決方案
這篇文章主要介紹了SpringMVC框架post提交數(shù)據(jù)庫(kù)出現(xiàn)亂碼解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Java實(shí)現(xiàn)FTP文件與文件夾的上傳和下載
本文主要分享了Java實(shí)現(xiàn)文件上傳和下載的具體實(shí)例,分為單個(gè)文件的上傳與下載和整個(gè)文件夾的上傳與下載。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12
java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法
這篇文章主要給大家介紹了關(guān)于java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法,這個(gè)錯(cuò)誤通常是由于Java版本不兼容導(dǎo)致的,請(qǐng)檢查您的項(xiàng)目所使用的Java版本是否與您當(dāng)前安裝的Java版本一致,需要的朋友可以參考下2024-06-06
SpringBoot環(huán)境配置知識(shí)總結(jié)
今天帶大家了解SpringBoot環(huán)境配置的相關(guān)知識(shí),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Java調(diào)用SQL腳本執(zhí)行常用的方法示例
這篇文章主要給大家介紹了關(guān)于Java調(diào)用SQL腳本執(zhí)行常用的方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04

