修改保存请求日志时,获取到的请求参数为null的情况

This commit is contained in:
RenKaiGe-Office
2018-07-10 11:30:37 +08:00
parent d3901bb713
commit d2700baa1d
2 changed files with 150 additions and 48 deletions

View File

@@ -1,7 +1,10 @@
package com.nis.interceptor;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
@@ -23,23 +26,44 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
private static final ThreadLocal<Long> timeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime");
/**
* 复制输入流
* @param inputStream
* @return
*/
public static InputStream cloneInputStream(ServletInputStream inputStream) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
return byteArrayInputStream;
}
/**
* 获取非get请求的参数
* @param request
* @return
*/
private static String getBodyString(ServletRequest request) {
ServletInputStream inputStream = null;
StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = request.getInputStream();
inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
@@ -64,8 +88,8 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String requestURI = request.getRequestURI();
logger.info("请求路径是:" + requestURI);
logger.info("请求参数是:" + getBodyString(request));
// logger.info("请求路径是:" + requestURI);
// logger.info("请求参数是:" + getBodyString(request));
long beginTime = System.currentTimeMillis();// 1、开始时间
timeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()) {

View File

@@ -9,9 +9,16 @@
package com.nis.web.service;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Date;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
@@ -43,7 +50,9 @@ public class SaveRequestLogThread implements Runnable {
private int businessCode;
private String exceptionInfo;
private String traceCode;
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
@@ -54,15 +63,18 @@ public class SaveRequestLogThread implements Runnable {
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);// 开启数据源B
// TODO Auto-generated method stub
if (service != null) {
service.saveRequestLog(remoteAddr,requestURI,queryString,contextPath, operator, version, opAction, opTime, content, requestTime, consumerTime,businessCode,exceptionInfo,traceCode);
service.saveRequestLog(remoteAddr, requestURI, queryString, contextPath, operator, version, opAction,
opTime, content, requestTime, consumerTime, businessCode, exceptionInfo, traceCode);
} else {
logger.error("service 为空!");
}
CustomerContextHolder.clearCustomerType();
}
public SaveRequestLogThread() {
super();
}
/**
* 创建一个新的实例 SaveRequestLogThread.
*
@@ -96,8 +108,9 @@ public class SaveRequestLogThread implements Runnable {
this.consumerTime = consumerTime;
this.exceptionInfo = exceptionInfo;
}
public SaveRequestLogThread(ServicesRequestLogService service,String operator, String version, int opAction, Date opTime,
Object content, Date requestTime, long consumerTime,String exceptionInfo) {
public SaveRequestLogThread(ServicesRequestLogService service, String operator, String version, int opAction,
Date opTime, Object content, Date requestTime, long consumerTime, String exceptionInfo) {
super();
this.service = service;
this.operator = operator;
@@ -110,11 +123,69 @@ public class SaveRequestLogThread implements Runnable {
this.exceptionInfo = exceptionInfo;
}
public static InputStream cloneInputStream(ServletInputStream inputStream) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try {
while ((len = inputStream.read(buffer)) > -1) {
byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
return byteArrayInputStream;
}
/**
* 获取非get请求的参数
* @param request
* @return
*/
private static String getBodyString(ServletRequest request) {
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
public static SaveRequestLogThread getNewSaveRequestLogThread(HttpServletRequest request) {
SaveRequestLogThread thread = new SaveRequestLogThread();
thread.setRemoteAddr(request.getRemoteAddr());
thread.setRequestURI(request.getRequestURI());
if (request.getMethod().toLowerCase().equals("get")) {
thread.setQueryString(request.getQueryString());
} else {
thread.setQueryString(getBodyString(request));
}
thread.setContextPath(request.getContextPath());
thread.setRequestTime(new Date());
BufferedReader reader = null;
@@ -144,6 +215,7 @@ public class SaveRequestLogThread implements Runnable {
}
return thread;
}
/**
* service
* @return service
@@ -335,6 +407,7 @@ public class SaveRequestLogThread implements Runnable {
public void setConsumerTime(long consumerTime) {
this.consumerTime = consumerTime;
}
/**
* businessCode
* @return businessCode
@@ -343,12 +416,14 @@ public class SaveRequestLogThread implements Runnable {
public int getBusinessCode() {
return businessCode;
}
/**
* @param businessCode the businessCode to set
*/
public void setBusinessCode(int businessCode) {
this.businessCode = businessCode;
}
/**
* exceptionInfo
* @return exceptionInfo
@@ -357,15 +432,18 @@ public class SaveRequestLogThread implements Runnable {
public String getExceptionInfo() {
return exceptionInfo;
}
/**
* @param exceptionInfo the exceptionInfo to set
*/
public void setExceptionInfo(String exceptionInfo) {
this.exceptionInfo = exceptionInfo;
}
public String getTraceCode() {
return traceCode;
}
public void setTraceCode(String traceCode) {
this.traceCode = traceCode;
}