package com.as.common.interceptor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
*
* @Description 打印请求信息
* @author 张银彪
* @category
* @date 2019年12月12日 下午5:50:26
* @version V0.1
*/
@Aspect
@Component
public class InfoPrint {
public final Logger logger=Logger.getLogger("infolog");;
//private static Logger log = LoggerFactory.getLogger(InfoPrint.class);
private final ObjectMapper mapper;
@Value("${xc.isDev}")
boolean isDev=false;
@Autowired
public InfoPrint(ObjectMapper mapper) {
this.mapper = mapper;
}
//使用此注解才可以进入打印
@Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();
System.out.println("\r\n \r\n");
String replace = joinPoint.getSignature().getDeclaringTypeName().replace(".", "\\");
File file = new File(System.getProperty("user.dir")+"/src/main/java/"+replace+".java");
String methodName = joinPoint.getSignature().getName();
StringBuilder result = new StringBuilder();
int i=1;
if (isDev) {
try{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
result.append( System.lineSeparator() + s);
if (s.contains(methodName+"(")) {
break;
}
i++;
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.println("------------Action Info Start------------");
System.out.println("目标方法名:->\t "+methodName+"()");
System.out.println("目标跳转类:->\t "+joinPoint.getSignature().getDeclaringTypeName()+".("+joinPoint.getSignature().getDeclaringType().getSimpleName()+".java:"+i+")");
Map<String, String[]> parameterMap = request.getParameterMap();
Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
for (Entry<String, String[]> entry : entrySet) {
System.out.println("请求参数: ->\t "+entry.getKey()+" = "+entry.getValue()[0]);
}
}
@AfterReturning(returning = "response", pointcut = "webLog()")
public void doAfterReturning(Object response) throws Throwable {
if (response != null) {
System.out.println("响应数据: ->\t " + mapper.writeValueAsString(response));
}
System.out.println("------------Action Info End------------");
System.out.println("\r\n \r\n");
}
}
Spring项目打印请求信息并点击信心进入请求方法
最新推荐文章于 2023-07-19 03:09:38 发布