deason 7 vuotta sitten
vanhempi
commit
3cc89388f8

+ 23 - 0
src/main/java/cn/com/qmth/examcloud/app/config/AccessInterceptor.java

@@ -9,6 +9,7 @@ package cn.com.qmth.examcloud.app.config;
 
 import cn.com.qmth.examcloud.app.model.DeviceRecord;
 import cn.com.qmth.examcloud.app.service.DeviceRecordService;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +48,7 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
         String token = request.getHeader("token");
         String params = this.getParams(request);
         String url = request.getServletPath() + params;
+        String ip = this.getIp(request);
 
         DeviceRecord record = new DeviceRecord();
         record.setSystem(system);
@@ -62,6 +64,7 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
         record.setLoginKey(key);
         record.setLoginToken(token);
         record.setUrl(url);
+        record.setIp(ip);
         record.setCreateDate(new Date());
         return record;
     }
@@ -90,4 +93,24 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
         return params.toString().replaceFirst("&", "?");
     }
 
+    private String getIp(HttpServletRequest request) {
+        String ip = request.getHeader("X-Forwarded-For");
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
 }

+ 11 - 0
src/main/java/cn/com/qmth/examcloud/app/model/DeviceRecord.java

@@ -45,7 +45,10 @@ public class DeviceRecord extends IdEntity {
     private String loginKey;//登录认证KEY
     @Column(length = 50)
     private String loginToken;//登录认证TOKEN
+    @Column(length = 300)
     private String url;//访问地址
+    @Column(length = 50)
+    private String ip;//访问IP
     private Date createDate;//创建时间
 
     public String getSystem() {
@@ -152,6 +155,14 @@ public class DeviceRecord extends IdEntity {
         this.url = url;
     }
 
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
     public Date getCreateDate() {
         return createDate;

+ 3 - 0
src/main/java/cn/com/qmth/examcloud/app/service/DeviceRecordService.java

@@ -85,6 +85,9 @@ public class DeviceRecordService {
                     if (StringUtils.isNotBlank(params.getUrl())) {
                         predicates.add(builder.like(root.get("url"), "%" + params.getUrl() + "%"));
                     }
+                    if (StringUtils.isNotBlank(params.getIp())) {
+                        predicates.add(builder.equal(root.get("ip"), params.getIp()));
+                    }
                     return builder.and(predicates.toArray(new Predicate[predicates.size()]));
                 }
             };

+ 9 - 6
src/main/resources/templates/deviceRecord/list.ftl

@@ -59,6 +59,9 @@
     <div class="btn-group">
         <input type="text" class="form-control" id="loginToken" placeholder="TOKEN"/>
     </div>
+    <div class="btn-group">
+        <input type="text" class="form-control" id="ip" placeholder="IP"/>
+    </div>
     <div class="btn-group">
         <a href="#" class="btn btn-info" onclick="doSearch()" style="margin-bottom: 10px"> 搜索</a>
     </div>
@@ -101,6 +104,7 @@
         params.account = $('#account').val();
         params.loginKey = $('#loginKey').val();
         params.loginToken = $('#loginToken').val();
+        params.ip = $('#ip').val();
 
         $("#contentDiv").empty();
         $.ajax({
@@ -134,9 +138,9 @@
         var html = [];
         for (var n = 0; n < list.length; n++) {
             var obj = list[n];
-            html.push('<tr>');
-            html.push('<td style="vertical-align: middle" curId=' + obj.id + '>' + emptyStr(obj.createDate) + '</td>');
-            html.push('<td>');
+            html.push('<tr><td style="vertical-align: middle;text-align: center" curId=' + obj.id + '>');
+            html.push(emptyStr(obj.createDate) + '</br>' + emptyStr(obj.ip));
+            html.push('</td><td>');
             html.push('<span> <b>访问地址:</b>' + emptyStr(obj.url) + '</span');
             html.push('<span> <b>KEY:</b>' + emptyStr(obj.loginKey) + '</span>');
             html.push('<span> <b>TOKEN:</b>' + emptyStr(obj.loginToken) + '</span>');
@@ -150,15 +154,14 @@
             html.push('<span> <b>APP版本号:</b>' + emptyStr(obj.appVersion) + '</span>');
             html.push('<span> <b>APP更新号:</b>' + emptyStr(obj.appCode) + '</span>');
             html.push('<span> <b>APP补丁号:</b>' + emptyStr(obj.patchCode) + '</span>');
-            html.push('</td>');
-            html.push('</tr>');
+            html.push('</td></tr>');
         }
         return html.join('');
     }
 
     function emptyStr(str) {
         if (!str || str == null) {
-            return "";
+            return "-";
         }
         return str;
     }