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;
+ }
+
+}