![JAR search and dependency download from the Maven repository](/logo.png)
top.doudou.common.aop.LogDataExtractor Maven / Gradle / Ivy
package top.doudou.common.aop;
import com.google.common.net.HttpHeaders;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.MediaType;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import top.doudou.common.tool.utils.BrowserUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
/**
* @Description 数据抽取器
* @Author 傻男人 <[email protected]>
* @Date 2020-09-24 14:53
* @Version V1.0
*/
@Slf4j
public class LogDataExtractor {
private LogDataExtractor() {
}
private static final String AND_REG = "&";
private static final String EQUALS_REG = "=";
/**
* 获取HttpServletRequest对象
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attributes != null ? attributes.getRequest() : null;
}
/**
* 获取HttpServletResponse对象
*/
public static HttpServletResponse getResponse() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return attributes != null ? attributes.getResponse() : null;
}
/**
* 获取请求参数内容
*
* @param parameterNames 参数名称列表
* @param args 参数列表
*/
public static Object getArgs(String[] parameterNames, Object[] args) {
Object target;
if (args.length == 1) target = args[0];
else target = args;
if (target == null) return null;
HttpServletRequest request = getRequest();
if (request != null && request.getContentType() != null
&& request.getContentType().length() > 0) {
String contentType = request.getContentType();
if (MediaType.APPLICATION_XML_VALUE.equals(contentType)) {
return xmlArgs(target);
}
if (MediaType.APPLICATION_FORM_URLENCODED_VALUE.equals(contentType) || MediaType.APPLICATION_JSON_VALUE.equals(contentType)) {
return target;
}
}
return appletArgs(parameterNames, args);
}
/**
* 获取程序执行结果内容
*/
public static Object getResult(Object resp) {
HttpServletResponse response = getResponse();
if (response != null && MediaType.APPLICATION_XML_VALUE.equals(response.getContentType()))
return xmlArgs(resp);
else return resp;
}
/**
* 获取程序参数
*
* @param parameterNames 参数名
* @param args 参数值
*/
public static Object appletArgs(String[] parameterNames, Object[] args) {
if (parameterNames == null || parameterNames.length == 0 || args == null || args.length == 0) return null;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parameterNames.length; i++) {
sb.append(parameterNames[i]).append(EQUALS_REG).append(args[i].toString()).append(AND_REG);
}
if (sb.lastIndexOf(AND_REG) != -1) {
sb.deleteCharAt(sb.lastIndexOf(AND_REG));
}
return sb.toString();
}
/**
* 解析XML 数据
*/
public static Object xmlArgs(Object pointArgs) {
try {
StringWriter writer = new StringWriter();
Marshaller marshaller = JAXBContext.newInstance(pointArgs.getClass()).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.marshal(pointArgs, writer);
return writer.toString().replace("standalone=\"yes\"", "");
} catch (JAXBException e) {
log.warn("parse xml data exception : {}", e.getLinkedException());
}
return pointArgs;
}
/**
* 获取 HttpServletRequest 对象信息
*/
public static void logHttpRequest(LogData data, String[] headers) {
HttpServletRequest request = LogDataExtractor.getRequest();
if (request != null) {
data.setHost(request.getLocalAddr());
data.setPort(request.getLocalPort());
data.setClientIp(BrowserUtils.getIP(request));
data.setReqUrl(request.getRequestURI());
data.setHttpMethod(request.getMethod());
Map headersMap = new HashMap<>();
for (String header : headers) {
String value = request.getHeader(header);
if (value != null && value.length() > 0) {
headersMap.put(header, request.getHeader(header));
}
}
String value = request.getHeader(HttpHeaders.USER_AGENT);
if(StringUtils.isNotEmpty(value)){
data.setUserAgent(value);
}
data.setHeaders(headersMap);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy