修改保存请求日志时,获取到的请求参数为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; package com.nis.interceptor;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.text.SimpleDateFormat; 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"); 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请求的参数 * 获取非get请求的参数
* @param request * @param request
* @return * @return
*/ */
private static String getBodyString(ServletRequest request) { private static String getBodyString(ServletRequest request) {
ServletInputStream inputStream = null; StringBuilder sb = new StringBuilder();
StringBuffer sb = new StringBuffer(); InputStream inputStream = null;
BufferedReader reader = null; BufferedReader reader = null;
try { try {
inputStream = request.getInputStream(); inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8"))); reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = ""; String line = "";
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
sb.append(line); sb.append(line);
} }
} catch (Exception e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
if (inputStream != null) { if (inputStream != null) {
@@ -64,8 +88,8 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { throws Exception {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
logger.info("请求路径是:" + requestURI); // logger.info("请求路径是:" + requestURI);
logger.info("请求参数是:" + getBodyString(request)); // logger.info("请求参数是:" + getBodyString(request));
long beginTime = System.currentTimeMillis();// 1、开始时间 long beginTime = System.currentTimeMillis();// 1、开始时间
timeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见) timeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {

View File

@@ -9,9 +9,16 @@
package com.nis.web.service; package com.nis.web.service;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Date; import java.util.Date;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@@ -43,7 +50,9 @@ public class SaveRequestLogThread implements Runnable {
private int businessCode; private int businessCode;
private String exceptionInfo; private String exceptionInfo;
private String traceCode; private String traceCode;
/* (non-Javadoc) /*
* (non-Javadoc)
*
* @see java.lang.Runnable#run() * @see java.lang.Runnable#run()
*/ */
@@ -54,15 +63,18 @@ public class SaveRequestLogThread implements Runnable {
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);// 开启数据源B CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);// 开启数据源B
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (service != null) { 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 { } else {
logger.error("service 为空!"); logger.error("service 为空!");
} }
CustomerContextHolder.clearCustomerType(); CustomerContextHolder.clearCustomerType();
} }
public SaveRequestLogThread() { public SaveRequestLogThread() {
super(); super();
} }
/** /**
* 创建一个新的实例 SaveRequestLogThread. * 创建一个新的实例 SaveRequestLogThread.
* *
@@ -96,8 +108,9 @@ public class SaveRequestLogThread implements Runnable {
this.consumerTime = consumerTime; this.consumerTime = consumerTime;
this.exceptionInfo = exceptionInfo; 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(); super();
this.service = service; this.service = service;
this.operator = operator; this.operator = operator;
@@ -110,11 +123,69 @@ public class SaveRequestLogThread implements Runnable {
this.exceptionInfo = exceptionInfo; 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) { public static SaveRequestLogThread getNewSaveRequestLogThread(HttpServletRequest request) {
SaveRequestLogThread thread = new SaveRequestLogThread(); SaveRequestLogThread thread = new SaveRequestLogThread();
thread.setRemoteAddr(request.getRemoteAddr()); thread.setRemoteAddr(request.getRemoteAddr());
thread.setRequestURI(request.getRequestURI()); thread.setRequestURI(request.getRequestURI());
if (request.getMethod().toLowerCase().equals("get")) {
thread.setQueryString(request.getQueryString()); thread.setQueryString(request.getQueryString());
} else {
thread.setQueryString(getBodyString(request));
}
thread.setContextPath(request.getContextPath()); thread.setContextPath(request.getContextPath());
thread.setRequestTime(new Date()); thread.setRequestTime(new Date());
BufferedReader reader = null; BufferedReader reader = null;
@@ -144,6 +215,7 @@ public class SaveRequestLogThread implements Runnable {
} }
return thread; return thread;
} }
/** /**
* service * service
* @return service * @return service
@@ -335,6 +407,7 @@ public class SaveRequestLogThread implements Runnable {
public void setConsumerTime(long consumerTime) { public void setConsumerTime(long consumerTime) {
this.consumerTime = consumerTime; this.consumerTime = consumerTime;
} }
/** /**
* businessCode * businessCode
* @return businessCode * @return businessCode
@@ -343,12 +416,14 @@ public class SaveRequestLogThread implements Runnable {
public int getBusinessCode() { public int getBusinessCode() {
return businessCode; return businessCode;
} }
/** /**
* @param businessCode the businessCode to set * @param businessCode the businessCode to set
*/ */
public void setBusinessCode(int businessCode) { public void setBusinessCode(int businessCode) {
this.businessCode = businessCode; this.businessCode = businessCode;
} }
/** /**
* exceptionInfo * exceptionInfo
* @return exceptionInfo * @return exceptionInfo
@@ -357,15 +432,18 @@ public class SaveRequestLogThread implements Runnable {
public String getExceptionInfo() { public String getExceptionInfo() {
return exceptionInfo; return exceptionInfo;
} }
/** /**
* @param exceptionInfo the exceptionInfo to set * @param exceptionInfo the exceptionInfo to set
*/ */
public void setExceptionInfo(String exceptionInfo) { public void setExceptionInfo(String exceptionInfo) {
this.exceptionInfo = exceptionInfo; this.exceptionInfo = exceptionInfo;
} }
public String getTraceCode() { public String getTraceCode() {
return traceCode; return traceCode;
} }
public void setTraceCode(String traceCode) { public void setTraceCode(String traceCode) {
this.traceCode = traceCode; this.traceCode = traceCode;
} }