當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot AOP完全讲解二:统一处理请求日志
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot AOP完全讲解二:统一处理请求日志
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/80669451
本文出自【趙彥軍的博客】
前言
不了解 AOP 概念的同學,請先看 AOP 基礎文章。
SpringBoot AOP完全講解一:基礎概念
添加依賴
maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>gradle
compile('org.springframework.boot:spring-boot-starter-web','org.springframework.boot:spring-boot-starter-aop' )新建切面文章
新建切面類 ControllerAspect
package com.yiba.didiapi.aop;import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer;@Aspect @Component public class ControllerAspect {//對 com.yiba.didiapi.controller 這個包做切面@Pointcut("execution(public * com.yiba.didiapi.controller.*.*(..))")public void postController() {}@Before("postController()")public void beforePost() {//請求前處理RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();Enumeration<String> headerNames = request.getHeaderNames();//獲取請求的 headerHashMap<String, String> headMap = new HashMap<>();while (headerNames.hasMoreElements()) {//以此取出頭信息String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);//取出頭信息內容headMap.put(headerName, headerValue);}//獲取完整的url路徑:http://localhost:8083/sdk/wii/swbuStringBuffer url = request.getRequestURL();//獲取請求的資源名部分:/sdk/wii/swbuString uri = request.getRequestURI();//獲取請求類型:POSTString method = request.getMethod();//獲取請求ip:12.45.36.23String ip = request.getRemoteAddr();System.out.println("url:" + url);System.out.println("uri:" + uri);System.out.println("method:" + method);System.out.println("ip:" + ip);headMap.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s, String s2) {System.out.println("head name:" + s + " value:" + s2);}});//獲取請求表單參數Map<String, String[]> paramsMap = request.getParameterMap();String queryString = "";for (String key : paramsMap.keySet()) {String[] values = paramsMap.get(key);for (int i = 0; i < values.length; i++) {String value = values[i];queryString += key + "=" + value + "&";}}// 去掉最后一個空格if (queryString.length() > 0) {queryString = queryString.substring(0, queryString.length() - 1);System.out.println("queryString:" + queryString);}//獲取post請求的body內容try {StringBuffer sb = new StringBuffer();InputStream is = request.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));String s = "";while ((s = br.readLine()) != null) {sb.append(s);}//獲取post請求的body內容System.out.println("request body:" + sb.toString());} catch (IOException e) {e.printStackTrace();}}@After("postController()")public void afterPost() {//請求后處理}}參考資料
SpringBoot AOP統一處理請求日志
個人微信號:zhaoyanjun125 , 歡迎關注
總結
以上是生活随笔為你收集整理的SpringBoot AOP完全讲解二:统一处理请求日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot AOP完全讲解一:
- 下一篇: SpringBoot 统一异常处理 C