轉載請标明出處: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();
//擷取請求的 header
HashMap<String, String> headMap = new HashMap<>();
while (headerNames.hasMoreElements()) {//以此取出頭資訊
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);//取出頭資訊内容
headMap.put(headerName, headerValue);
}
//擷取完整的url路徑:http://localhost:/sdk/wii/swbu
StringBuffer url = request.getRequestURL();
//擷取請求的資源名部分:/sdk/wii/swbu
String uri = request.getRequestURI();
//擷取請求類型:POST
String method = request.getMethod();
//擷取請求ip:
String 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>() {
@Override
public 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 = ; i < values.length; i++) {
String value = values[i];
queryString += key + "=" + value + "&";
}
}
// 去掉最後一個空格
if (queryString.length() > ) {
queryString = queryString.substring(, queryString.length() - );
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 , 歡迎關注