亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何使用Aspect切面攔截打印請求參數

發布時間:2021-07-15 09:16:36 來源:億速云 閱讀:490 作者:chen 欄目:開發技術

這篇文章主要介紹“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切面攔截打印請求參數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉水县| 罗平县| 荆州市| 治多县| 沙湾县| 筠连县| 额济纳旗| 洱源县| 湖南省| 万荣县| 文山县| 沛县| 项城市| 合水县| 大英县| 汉阴县| 普安县| 鹿邑县| 云林县| 云梦县| 丰原市| 涿州市| 庆云县| 玛纳斯县| 绩溪县| 华安县| 徐州市| 杭州市| 平阳县| 屯门区| 灵山县| 巢湖市| 嘉峪关市| 阜平县| 新田县| 惠安县| 屏东市| 钦州市| 容城县| 章丘市| 银川市|