From b86458c06c3d87ec178e1264e811fc088a5f289c Mon Sep 17 00:00:00 2001 From: diven Date: Sun, 29 Jan 2023 13:56:40 +0800 Subject: [PATCH] init --- open-anpr-server/pom.xml | 6 +++ .../server/bootstrap/conf/AspectConfig.java | 40 +++++++++++++++++ .../open/anpr/server/utils/RequestUtil.java | 45 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/AspectConfig.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/RequestUtil.java diff --git a/open-anpr-server/pom.xml b/open-anpr-server/pom.xml index ce1e8f1..f343863 100644 --- a/open-anpr-server/pom.xml +++ b/open-anpr-server/pom.xml @@ -18,6 +18,12 @@ spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-aop + + org.springframework.boot spring-boot-starter-validation diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/AspectConfig.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/AspectConfig.java new file mode 100644 index 0000000..478feb7 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/AspectConfig.java @@ -0,0 +1,40 @@ +package com.visual.open.anpr.server.bootstrap.conf; + +import com.visual.open.anpr.server.utils.RequestUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +@Aspect +@Component +public class AspectConfig { + + public Logger logger = LoggerFactory.getLogger(getClass()); + + @Pointcut(" execution(* com..PlateController.recognition(..))" ) + public void recognitionPointCut() { + } + + @Around("recognitionPointCut()") + public Object runTimeStatistics(ProceedingJoinPoint pjp) throws Throwable { + long startTime = System.currentTimeMillis(); + String ip = "0.0.0.0"; + try { + ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + ip = RequestUtil.getRemoteHost(sra.getRequest()); + }catch (Throwable t){} + + try { + return pjp.proceed(); + }finally { + long costTime = System.currentTimeMillis() - startTime; + logger.info("plate recognition cost time : {} ms, from ip: {}", costTime, ip); + } + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/RequestUtil.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/RequestUtil.java new file mode 100644 index 0000000..75472a1 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/RequestUtil.java @@ -0,0 +1,45 @@ +package com.visual.open.anpr.server.utils; + +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +public class RequestUtil { + + /** + * 获取目标主机的ip + */ + public static String getRemoteHost(HttpServletRequest request) { + String Xip = request.getHeader("X-Real-IP"); + String XFor = request.getHeader("X-Forwarded-For"); + if(StringUtils.isNotBlank(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { + int index = XFor.indexOf(","); + if(index != -1) { + return XFor.substring(0, index); + } else { + return XFor; + } + } + XFor = Xip; + if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { + return XFor; + } + if(StringUtils.isBlank(XFor) || "unKnown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("Proxy-Client-IP"); + } + if(StringUtils.isBlank(XFor) || "unKnown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("WL-Proxy-Client-IP"); + } + if(StringUtils.isBlank(XFor) || "unKnown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("HTTP_CLIENT_IP"); + } + if(StringUtils.isBlank(XFor) || "unKnown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if(StringUtils.isBlank(XFor) || "unKnown".equalsIgnoreCase(XFor)) { + XFor = request.getRemoteAddr(); + } + return XFor; + } + +}