summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshangguan <[email protected]>2019-07-22 17:42:56 +0800
committershangguan <[email protected]>2019-07-22 17:42:56 +0800
commit87291bb7d05448552e7a4aed62f4d607a28b69dc (patch)
tree873836eb24d913e4bd7096df6dad939d7b775e30
parent715f6a3e55103ad00e5499cd1d1744035f47d1e4 (diff)
流量日志菜单-修改文件扫描页面展示的字段,新增用户账户采集结果页面space_mapping_20190603
-rw-r--r--src/main/java/com/nis/domain/log/NtcHttpObjScanResultLog.java71
-rw-r--r--src/main/java/com/nis/domain/log/NtcUserAccountLog.java62
-rw-r--r--src/main/java/com/nis/util/Constants.java6
-rw-r--r--src/main/java/com/nis/web/controller/log/ntc/UserAccountLogController.java174
-rw-r--r--src/main/resources/messages/message_en.properties12
-rw-r--r--src/main/resources/messages/message_ru.properties12
-rw-r--r--src/main/resources/messages/message_zh_CN.properties12
-rw-r--r--src/main/resources/nis.properties3
-rw-r--r--src/main/resources/sql/20190718/add_sys_menu.sql2
-rw-r--r--src/main/webapp/WEB-INF/views/log/ntc/httpObjScanResultList.jsp14
-rw-r--r--src/main/webapp/WEB-INF/views/log/ntc/userAccountList.jsp381
11 files changed, 734 insertions, 15 deletions
diff --git a/src/main/java/com/nis/domain/log/NtcHttpObjScanResultLog.java b/src/main/java/com/nis/domain/log/NtcHttpObjScanResultLog.java
index 043e5040..5855ab8a 100644
--- a/src/main/java/com/nis/domain/log/NtcHttpObjScanResultLog.java
+++ b/src/main/java/com/nis/domain/log/NtcHttpObjScanResultLog.java
@@ -43,11 +43,26 @@ public class NtcHttpObjScanResultLog extends BaseLogEntity<NtcHttpObjScanResultL
@ExcelField(title = "malware_id", sort = 16)
private Integer malwareId;//恶意文件命中病毒ID
- @ExcelField(title = "malware_type", sort = 16)
- private String malwareType;//恶意病毒类型
+// @ExcelField(title = "malware_type", sort = 16)
+// private String malwareType;//恶意病毒类型
@ExcelField(title = "malware_name", sort = 16)
private String malwareName;//恶意病毒名称
+
+ @ExcelField(title = "mal_classification", sort = 16)
+ private String malClassification;//恶意病毒分类
+
+ @ExcelField(title = "mal_behaviour", sort = 16)
+ private String malBehaviour;//恶意病毒行为
+
+ @ExcelField(title = "mal_environment", sort = 16)
+ private String malEnvironment;//恶意病毒宿主环境
+
+ @ExcelField(title = "mal_family", sort = 16)
+ private String malFamily;//恶意病毒家族
+
+ @ExcelField(title = "mal_variant", sort = 16)
+ private String malVariant;//恶意病毒变种
@@ -140,13 +155,13 @@ public class NtcHttpObjScanResultLog extends BaseLogEntity<NtcHttpObjScanResultL
this.malwareId = malwareId;
}
- public String getMalwareType() {
- return malwareType;
- }
+// public String getMalwareType() {
+// return malwareType;
+// }
- public void setMalwareType(String malwareType) {
- this.malwareType = malwareType;
- }
+// public void setMalwareType(String malwareType) {
+// this.malwareType = malwareType;
+// }
public String getMalwareName() {
return malwareName;
@@ -155,6 +170,46 @@ public class NtcHttpObjScanResultLog extends BaseLogEntity<NtcHttpObjScanResultL
public void setMalwareName(String malwareName) {
this.malwareName = malwareName;
}
+
+ public String getMalClassification() {
+ return malClassification;
+ }
+
+ public void setMalClassification(String malClassification) {
+ this.malClassification = malClassification;
+ }
+
+ public String getMalBehaviour() {
+ return malBehaviour;
+ }
+
+ public void setMalBehaviour(String malBehaviour) {
+ this.malBehaviour = malBehaviour;
+ }
+
+ public String getMalEnvironment() {
+ return malEnvironment;
+ }
+
+ public void setMalEnvironment(String malEnvironment) {
+ this.malEnvironment = malEnvironment;
+ }
+
+ public String getMalFamily() {
+ return malFamily;
+ }
+
+ public void setMalFamily(String malFamily) {
+ this.malFamily = malFamily;
+ }
+
+ public String getMalVariant() {
+ return malVariant;
+ }
+
+ public void setMalVariant(String malVariant) {
+ this.malVariant = malVariant;
+ }
}
diff --git a/src/main/java/com/nis/domain/log/NtcUserAccountLog.java b/src/main/java/com/nis/domain/log/NtcUserAccountLog.java
new file mode 100644
index 00000000..0d209aba
--- /dev/null
+++ b/src/main/java/com/nis/domain/log/NtcUserAccountLog.java
@@ -0,0 +1,62 @@
+package com.nis.domain.log;
+
+import com.nis.util.excel.ExcelField;
+/**
+ *
+ *用户账户采集结果 实体类
+ *
+ */
+public class NtcUserAccountLog extends BaseLogEntity<NtcUserAccountLog> {
+
+ private static final long serialVersionUID = -7697668215327123848L;
+
+
+
+ @ExcelField(title = "domain", sort = 9)
+ private String domain;// 域名
+
+ @ExcelField(title = "account", sort = 10)
+ private String account;//用户账号
+
+ @ExcelField(title = "phone_number", sort = 11)
+ private String phoneNumber;// 用户手机号
+
+ @ExcelField(title = "email", sort = 12)
+ private String email;// 用户邮箱
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getPhoneNumber() {
+ return phoneNumber;
+ }
+
+ public void setPhoneNumber(String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+
+
+
+}
diff --git a/src/main/java/com/nis/util/Constants.java b/src/main/java/com/nis/util/Constants.java
index 17c2bc51..1a5a90b6 100644
--- a/src/main/java/com/nis/util/Constants.java
+++ b/src/main/java/com/nis/util/Constants.java
@@ -827,5 +827,9 @@ public final class Constants {
* 文件扫描结果接口
*/
public static final String NTC_HTTP_OBJSCAN_RESULT_LOGS = Configurations.getStringProperty("ntcHttpObjscanResultLogs","");
-
+ /**
+ * 用户账户采集结果接口
+ */
+ public static final String NTC_USER_ACCOUNT_COLLECT_LOGS = Configurations.getStringProperty("ntcUserAccountCollectLogs","");
+
}
diff --git a/src/main/java/com/nis/web/controller/log/ntc/UserAccountLogController.java b/src/main/java/com/nis/web/controller/log/ntc/UserAccountLogController.java
new file mode 100644
index 00000000..a3d87c80
--- /dev/null
+++ b/src/main/java/com/nis/web/controller/log/ntc/UserAccountLogController.java
@@ -0,0 +1,174 @@
+package com.nis.web.controller.log.ntc;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+import com.nis.domain.FunctionServiceDict;
+import com.nis.domain.Page;
+import com.nis.domain.PageLog;
+import com.nis.domain.SysUser;
+import com.nis.domain.log.NtcUserAccountLog;
+import com.nis.domain.maat.LogRecvData;
+import com.nis.util.Constants;
+import com.nis.util.DictUtils;
+import com.nis.util.LogUtils;
+import com.nis.util.httpclient.HttpClientUtil;
+import com.nis.web.controller.BaseController;
+import com.nis.web.security.UserUtils;
+
+@Controller
+@RequestMapping("${adminPath}/log/ntc/ntcUserAccountLog")
+public class UserAccountLogController extends BaseController {
+
+ @RequestMapping(value = { "list", "" })
+ public String list(@ModelAttribute("log") NtcUserAccountLog log, Model model, HttpServletRequest request,
+ HttpServletResponse response) {
+ try {
+ PageLog<NtcUserAccountLog> page = new PageLog<NtcUserAccountLog>(request, response);
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("pageSize", page.getPageSize());
+ params.put("pageNo", page.getPageNo());
+
+ initLogSearchValue(log, params);
+
+ if (StringUtils.isNotBlank(log.getdPort())) {
+ params.put("searchDPort", log.getdPort());
+ }
+ if (StringUtils.isNotBlank(log.getsPort())) {
+ params.put("searchSPort", log.getsPort());
+ }
+ if (null != log.getDeviceId()) {
+ params.put("searchDeviceId", log.getDeviceId());
+ }
+ if (null != log.getDomain()) {
+ params.put("searchDomain", log.getDomain());
+ }
+
+ List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
+ model.addAttribute("serviceList", serviceList);
+
+ String url = Constants.LOG_BASE_URL + Constants.NTC_USER_ACCOUNT_COLLECT_LOGS;
+ String recv = HttpClientUtil.getMsg(url, params, request);
+
+ Gson gson = new GsonBuilder().create();
+
+ LogRecvData<NtcUserAccountLog> fromJson = gson.fromJson(recv,
+ new TypeToken<LogRecvData<NtcUserAccountLog>>() {
+ }.getType());
+ if (fromJson.getStatus().intValue() == 200) {
+ Page<NtcUserAccountLog> data = fromJson.getData();
+ page.setCount(data.getCount());
+ page.setLast(data.getLast());
+ page.setList(data.getList());
+ List<NtcUserAccountLog> list = page.getList();
+ for (NtcUserAccountLog l : list) {
+ l.setFunctionId(log.getFunctionId());
+ setLogAction(l, serviceList);
+ }
+ model.addAttribute("page", page);
+ }
+ } catch (Exception e) {
+ logger.error("查询失败", e);
+ addMessageLog(model, e.getMessage());
+ LogUtils.saveLog(request, null, e, null);
+ }
+
+ return "/log/ntc/userAccountList";
+ }
+
+ // 用户账户采集结果 导出
+ @RequestMapping(value = "exportNtcUserAccount")
+ public void exportHttpObjScanResult(@ModelAttribute("log") NtcUserAccountLog log, Model model, String hColumns, String type,
+ HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+ try {
+ // export data info
+ List<String> titleList = new ArrayList<String>();
+ Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();
+ Map<String, List> dataMap = new HashMap<String, List>();
+ Map<String, String> noExportMap = new HashMap<String, String>();
+ // ---------------------------
+ PageLog<NtcUserAccountLog> page = new PageLog<NtcUserAccountLog>(request, response);
+ page.setPageNo(1);
+ page.setPageSize(Constants.MAX_LOG_EXPORT_SIZE);
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("pageSize", page.getPageSize());
+ params.put("pageNo", page.getPageNo());
+
+ initLogSearchValue(log, params);
+
+ if (StringUtils.isNotBlank(log.getdPort())) {
+ params.put("searchDport", log.getdPort());
+ }
+ if (StringUtils.isNotBlank(log.getsPort())) {
+ params.put("searchSport", log.getsPort());
+ }
+ if (null != log.getDeviceId()) {
+ params.put("searchDeviceId", log.getDeviceId());
+ }
+ if (null != log.getDomain()) {
+ params.put("searchDomain", log.getDomain());
+ }
+
+ List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
+ model.addAttribute("serviceList", serviceList);
+
+ String url = Constants.LOG_BASE_URL + Constants.NTC_USER_ACCOUNT_COLLECT_LOGS;
+ String recv = HttpClientUtil.getMsg(url, params, request);
+ List<NtcUserAccountLog> list = new ArrayList<NtcUserAccountLog>();
+ if (StringUtils.isNotBlank(recv)) {
+ Gson gson = new GsonBuilder().create();
+ LogRecvData<NtcUserAccountLog> fromJson = gson.fromJson(recv,
+ new TypeToken<LogRecvData<NtcUserAccountLog>>() {
+ }.getType());
+ if (fromJson.getStatus().intValue() == 200) {
+ Page<NtcUserAccountLog> data = fromJson.getData();
+ list = data.getList();
+ }
+ }
+ for (NtcUserAccountLog l : list) {
+ l.setFunctionId(log.getFunctionId());
+ setLogAction(l, serviceList);
+ }
+ titleList.add("user_account");
+ classMap.put("user_account", NtcUserAccountLog.class);
+ SysUser user = UserUtils.getUser();
+ if (!user.isAdmin()) {
+ hColumns += ",scene_file,";
+ } else {
+ hColumns += ",";
+ }
+ String cfgIndexInfoNoExport = ",action,cfg_id,"
+ + hColumns;
+ noExportMap.put("user_account", cfgIndexInfoNoExport);
+ dataMap.put("user_account", list);
+ String timeRange = initLogMap(log, "user_account");
+ noExportMap.put("timeRange", timeRange);
+ if ("csv".equals(type)) {
+ this._exportCsv(model, request, response, redirectAttributes, "user_account", titleList, classMap,
+ dataMap, noExportMap);
+ } else {
+ this._export(model, request, response, redirectAttributes, "user_account", titleList, classMap, dataMap,
+ noExportMap);
+ }
+ } catch (Exception e) {
+ logger.error("user_account export failed", e);
+ addMessage(redirectAttributes, "error", "export_failed");
+ LogUtils.saveLog(request, null, e, null);
+ }
+ }
+}
diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties
index 8204b5dd..9785b6f2 100644
--- a/src/main/resources/messages/message_en.properties
+++ b/src/main/resources/messages/message_en.properties
@@ -1548,4 +1548,14 @@ http_seq=HTTP Seq
proxy_flag=Proxy Flag
ddos_log=Attacks
other_system_ddos_log_menu=Attack Chain
-other_system_ddos_report_menu=Attack Posture \ No newline at end of file
+other_system_ddos_report_menu=Attack Posture
+mal_classification=Mal Classification
+mal_behaviour=Mal Behaviour
+mal_environment=Mal Environment
+mal_family=Mal Family
+mal_variant=Mal Variant
+user_account=User Account
+domian=Domain
+account=User Account
+phone_number=Phone Number
+email=Email \ No newline at end of file
diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties
index 6652418d..51b12bb4 100644
--- a/src/main/resources/messages/message_ru.properties
+++ b/src/main/resources/messages/message_ru.properties
@@ -1551,4 +1551,14 @@ http_seq=HTTP Seq
proxy_flag=Proxy Flag
ddos_log=\u0430\u0442\u0430\u043a\u0438
other_system_ddos_log_menu=\u0414\u0435\u0442\u0430\u043b\u0438 \u0426\u0435\u043f\u043e\u0447\u043a\u0438
-other_system_ddos_report_menu=\u0440\u0435\u0436\u0438\u043c \u0430\u0442\u0430\u043a\u0438 \ No newline at end of file
+other_system_ddos_report_menu=\u0440\u0435\u0436\u0438\u043c \u0430\u0442\u0430\u043a\u0438
+mal_classification=Mal Classification
+mal_behaviour=Mal Behaviour
+mal_environment=Mal Environment
+mal_family=Mal Family
+mal_variant=Mal Variant
+user_account=User Account
+domian=Domain
+account=User Account
+phone_number=Phone Number
+email=Email \ No newline at end of file
diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties
index df6141b4..4ce83a46 100644
--- a/src/main/resources/messages/message_zh_CN.properties
+++ b/src/main/resources/messages/message_zh_CN.properties
@@ -1549,4 +1549,14 @@ http_seq=\u4f1a\u8bdd\u5e8f\u5217\u53f7
proxy_flag=\u4ee3\u7406\u6807\u5fd7
ddos_log=\u653b\u51fb
other_system_ddos_log_menu=\u653b\u51fb\u94fe
-other_system_ddos_report_menu=\u653b\u51fb\u6001\u52bf \ No newline at end of file
+other_system_ddos_report_menu=\u653b\u51fb\u6001\u52bf
+mal_classification=\u6076\u610f\u75c5\u6bd2\u5206\u7c7b
+mal_behaviour=\u6076\u610f\u75c5\u6bd2\u884c\u4e3a
+mal_environment=\u6076\u610f\u75c5\u6bd2\u5bbf\u4e3b\u73af\u5883
+mal_family=\u6076\u610f\u75c5\u6bd2\u5bb6\u65cf
+mal_variant=\u6076\u610f\u75c5\u6bd2\u53d8\u79cd
+user_account=\u7528\u6237\u8D26\u6237
+domain=\u57DF\u540D
+account=\u7528\u6237\u8D26\u53F7
+phone_number=\u7528\u6237\u624B\u673A\u53F7
+email=\u90AE\u7BB1 \ No newline at end of file
diff --git a/src/main/resources/nis.properties b/src/main/resources/nis.properties
index 2a76c440..0b62df03 100644
--- a/src/main/resources/nis.properties
+++ b/src/main/resources/nis.properties
@@ -529,4 +529,5 @@ ntcHttpPostCollectLogs=v1/ntcHttpPostCollectLogs
ntcHttpDocCollectLogs=v1/ntcHttpDocCollectLogs
ntcHttpAvCollectLogs=v1/ntcHttpAvCollectLogs
ntcHttpExeCollectLogs=v1/ntcHttpExeCollectLogs
-ntcHttpObjscanResultLogs=v1/ntcHttpObjscanResultLogs \ No newline at end of file
+ntcHttpObjscanResultLogs=v1/ntcHttpObjscanResultLogs
+ntcUserAccountCollectLogs=v1/ntcUserAccountCollectLogs \ No newline at end of file
diff --git a/src/main/resources/sql/20190718/add_sys_menu.sql b/src/main/resources/sql/20190718/add_sys_menu.sql
new file mode 100644
index 00000000..3032fada
--- /dev/null
+++ b/src/main/resources/sql/20190718/add_sys_menu.sql
@@ -0,0 +1,2 @@
+# 新增日志检索->流量日志->用户账户
+INSERT INTO `sys_menu` (`parent_id`, `parent_ids`, `code`, `name`, `sort`, `href`, `target`, `icon`, `is_show`, `permission`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`, `menu_bg`, `quick_action`, `is_top`, `function_id`) VALUES ('1217', '0,1,152,1217,', 'user_account', '用户账户', '410', '/log/ntc/ntcUserAccountLog', '', '', '1', '', '1', '2019-07-18 16:49:21', '1', '2019-07-18 16:49:21', '', '1', NULL, '0', '0', NULL); \ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/views/log/ntc/httpObjScanResultList.jsp b/src/main/webapp/WEB-INF/views/log/ntc/httpObjScanResultList.jsp
index ae67f6c1..7e7cd5b3 100644
--- a/src/main/webapp/WEB-INF/views/log/ntc/httpObjScanResultList.jsp
+++ b/src/main/webapp/WEB-INF/views/log/ntc/httpObjScanResultList.jsp
@@ -241,8 +241,13 @@
<th class="sort-column res_body_file" column="res_body_file"><spring:message code="res_body_file"/></th>
<th class="sort-column topic_name" isVisible="false" column="topic_name"><spring:message code="topic_name"/></th>
<th class="sort-column malware_id" isVisible="false" column="malware_id"><spring:message code="malware_id"/></th>
- <th class="sort-column malware_type" column="malware_type"><spring:message code="malware_type"/></th>
+ <%-- <th class="sort-column malware_type" column="malware_type"><spring:message code="malware_type"/></th> --%>
<th class="sort-column malware_name" column="malware_name"><spring:message code="malware_name"/></th>
+ <th class="sort-column mal_classification" isVisible="false" column="mal_classification"><spring:message code="mal_classification"/></th>
+ <th class="sort-column mal_behaviour" isVisible="false" column="mal_behaviour"><spring:message code="mal_behaviour"/></th>
+ <th class="sort-column mal_environment" isVisible="false" column="mal_environment"><spring:message code="mal_environment"/></th>
+ <th class="sort-column mal_family" isVisible="false" column="mal_family"><spring:message code="mal_family"/></th>
+ <th class="sort-column mal_variant" isVisible="false" column="mal_variant"><spring:message code="mal_variant"/></th>
<th class="sort-column cap_ip" isVisible="false" column="clj_ip"><spring:message code="clj_ip"/></th>
<th class="sort-column trans_proto" column="transport_layer_protocol"><spring:message code="transport_layer_protocol"/></th>
@@ -355,8 +360,13 @@
</td>
<td >${log.topicName}</td>
<td >${log.malwareId}</td>
- <td >${log.malwareType}</td>
+ <%-- <td >${log.malwareType}</td> --%>
<td >${log.malwareName}</td>
+ <td >${log.malClassification}</td>
+ <td >${log.malBehaviour}</td>
+ <td >${log.malEnvironment}</td>
+ <td >${log.malFamily}</td>
+ <td >${log.malVariant}</td>
<td >${log.capIp}</td>
<td>
<c:set var="transProtos">${log.transProto }</c:set>
diff --git a/src/main/webapp/WEB-INF/views/log/ntc/userAccountList.jsp b/src/main/webapp/WEB-INF/views/log/ntc/userAccountList.jsp
new file mode 100644
index 00000000..2044f610
--- /dev/null
+++ b/src/main/webapp/WEB-INF/views/log/ntc/userAccountList.jsp
@@ -0,0 +1,381 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+<%@ include file="/WEB-INF/include/taglib.jsp"%>
+<html>
+<head>
+<title>
+ <spring:message code="user_account"></spring:message>
+</title>
+<script>
+ $(document).ready(function() {
+ //reset
+ $("#resetBtn").on("click",function(){
+ $("select.selectpicker").each(function(){
+ $(this).selectpicker('val',$(this).find('option:first').val());
+ $(this).find("option").attr("selected",false);
+ $(this).find("option:first").attr("selected",true);
+ });
+ $(".Wdate").attr("value",'');
+ $(':input','#searchForm')
+ .not(':button,:submit,:reset,:hidden')
+ .attr("value",'');
+ $("#searchForm")[0].reset();
+ });
+
+ //筛选功能
+ filterActionInit();
+
+ //异步获取voip相关信息
+ $("span[id^=open]").click(function(){
+ var openId=$(this).attr("id");
+ var closeId=$(this).attr("id").replace("open","close");
+ var index=$(this).attr("id").replace("open","");
+ $("#"+openId).hide();
+ $("#"+closeId).show();
+ var compileId=$(this).attr("compileId");
+// var cfgId=$(this).attr("cfgId");
+ if($("#"+openId).parent().parent().next("tr").hasClass("child")){
+ $("#"+openId).parent().parent().next("tr").show();
+ }else{
+ $.ajax({
+ type:'post',
+ async:false,
+ url:'${ctx}/ntc/website/ajaxHttpSubList',
+ data:{"compileId":compileId,"index":index},
+ dataType:"html",
+ success:function(data){
+ var subTab="<tr class='child'>"+
+ "<td colspan='"+($(".table tr").eq(0).children("th").length-1)+"'>";
+ var html="";
+ html+="<div class='row'>";
+ html = html+data;
+ subTab=subTab+html;
+ subTab+="</td>";
+ subTab+="</tr>";
+ $("#"+openId).parent().parent().after(subTab);
+ $("div[name='tabTitle"+index+"']").get(0).click();
+ }
+ });
+ }
+
+ });
+
+ $("span[id^=close]").on("click",function(){
+ var closeId=$(this).attr("id");
+ var openId=$(this).attr("id").replace("close","open");
+ $("#"+closeId).hide();
+ $("#"+openId).show();
+ $("#"+closeId).parent().parent().next("tr").hide();
+ });
+ });
+</script>
+</head>
+<body>
+
+<div class="page-content">
+ <div class="theme-panel hidden-xs hidden-sm">
+ </div>
+ <h3 class="page-title">
+ <spring:message code="user_account"/>
+ </h3>
+ <h5 class="page-header"></h5>
+ <div class="col-md-12">
+ <div class="portlet">
+ <div class="portlet-body">
+ <div class="row" >
+ <form:form id="searchForm" modelAttribute="log" action="${ctx}/log/ntc/ntcUserAccountLog/list" method="post" class="form-search">
+ <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+ <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+ <input id="functionId" name="functionId" type="hidden" value="${log.functionId}"/>
+ <input id="isLogTotalSearch" name="isLogTotalSearch" type="hidden" value="${log.isLogTotalSearch}"/>
+ <!-- 筛选按钮展开状态-->
+ <input id="isFilterAction" name="isFilterAction" type="hidden" value="${log.isFilterAction }"/><sys:tableSort id="orderBy" name="orderBy" value="${page.orderBy}" callback="page();"/>
+ <!-- 搜索内容与操作按钮栏 -->
+ <div class="col-md-12">
+
+ <div class="pull-left">
+ <div class="input-group">
+ <div class="input-group-btn">
+ <span class="selectpicker form-control" ><spring:message code="begin_date"/></span>
+ </div>
+ <%-- <input id="searchFoundStartTime" name="searchFoundStartTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundStartTime}" onclick="WdatePicker({onpicked:setTimee,dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true,maxDate:'#F{$dp.$D(\'searchFoundEndTime\')}'});"/> --%>
+ <input name="searchFoundStartTime" id="searchFoundStartTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundStartTime}" onclick="WdatePicker({onpicked:function(){this.onchange()},dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true,maxDate:'#F{\'new Date()\'}'});" onchange="setStartTime('#searchFoundStartTime','#searchFoundEndTime',1,'d','yyyy-MM-dd hh:mm:ss',false)"/>
+ </div>
+ </div>
+ <div class="pull-left">
+ <div class="input-group">
+ <div class="input-group-btn">
+ <span class="selectpicker form-control" ><spring:message code="end_date"/></span>
+ </div>
+ <%-- <input id="searchFoundEndTime" name="searchFoundEndTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundEndTime}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true,minDate:'#F{$dp.$D(\'searchFoundStartTime\')}',maxDate:'#F{$dp.$D(\'searchFoundStartTime\',{d:1})}'});"/> --%>
+ <input name="searchFoundEndTime" id="searchFoundEndTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundEndTime}" onclick="WdatePicker({onpicked:function(){this.onchange()},dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true,maxDate:'#F{\'new Date()\'}'});" onchange="setEndTime('#searchFoundStartTime','#searchFoundEndTime',1,'d','yyyy-MM-dd hh:mm:ss',false)"/>
+ </div>
+ </div>
+ <div class="pull-left">
+ <button type="button" class="btn blue" onClick="return page()"> <i class="fa fa-search"></i> <spring:message code="search"/> </button>
+ <button type="button" class="btn btn-default" id="resetBtn"> <i class="fa fa-refresh"></i> <spring:message code="reset"/> </button>
+ <button type="button" class="btn btn-default" id="filter-btn"> <spring:message code="filter"/><i class="fa fa-angle-double-down"></i></button>
+ </div>
+ <div class="pull-right">
+ <div class="btn-group">
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-wrench"></i> <spring:message code="export"></spring:message>
+ <i class="fa fa-angle-down"></i>
+ </button>
+ <ul class="dropdown-menu pull-right" style="min-width: 110px;" >
+ <li><sys:delRow url="${ctx}/log/ntc/ntcUserAccountLog/exportNtcUserAccount?type=excel" searchUrl="${ctx}/log/ntc/ntcUserAccountLog/list" id="contentTable" maxRow="10000" label="excel"></sys:delRow></li>
+ <li><sys:delRow url="${ctx}/log/ntc/ntcUserAccountLog/exportNtcUserAccount?type=csv" searchUrl="${ctx}/log/ntc/ntcUserAccountLog/list" id="contentTable" maxRow="10000" label="csv"></sys:delRow></li>
+ </ul>
+ </div>
+ <a class="btn btn-icon-only btn-default setfields tooltips"
+ data-container="body" data-placement="top" data-original-title=<spring:message code="custom_columns"/> href="javascript:;">
+ <i class="icon-wrench"></i>
+ </a>
+ </div>
+ </div>
+ <!-- 搜索内容与操作按钮栏 -->
+
+ <!-- 筛选搜索内容栏默认隐藏-->
+ <div class="col-md-12 filter-action-select-panle hide" >
+ <div class="row">
+
+ <%-- <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="entrance"/>:</label>
+ <form:select path="entranceId" class="selectpicker form-control" data-live-search="true" data-live-search-placeholder="search">
+ <form:option value=""><spring:message code="select"/></form:option>
+ <c:forEach items="${fns:getDictList('ENTRANCE')}" var="entrance">
+ <form:option value="${entrance.itemCode}"><spring:message code="${entrance.itemValue}"></spring:message></form:option>
+ </c:forEach>
+ </form:select>
+ </div>
+ </div> --%>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="clj_ip"></spring:message>:</label>
+ <input name="capIp" type="text" class="form-control" value="${log.capIp }"/>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label class="control-label"><spring:message code='transport_layer_protocol'/>:</label>
+ <form:select path="transProto" class="selectpicker form-control">
+ <form:option value=""><spring:message code="select"/></form:option>
+ <c:forEach items="${fns:getDictList('LOG_PROTOCOL')}" var="protocol" >
+ <form:option value="${protocol.itemCode}"><spring:message code="${protocol.itemValue}"></spring:message></form:option>
+ </c:forEach>
+ </form:select>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="serverip"></spring:message>:</label>
+ <input name="dIp" type="text" class="form-control" value="${log.dIp }"/>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="clientip"></spring:message>:</label>
+ <input name="sIp" type="text" class="form-control" value="${log.sIp }"/>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="row">
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="server_port"></spring:message>:</label>
+ <input name="dPort" type="text" class="form-control logCfgId number" value="${log.dPort }"/>
+ </div>
+ </div>
+
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="client_port"></spring:message>:</label>
+ <input name="sPort" type="text" class="form-control logCfgId number" value="${log.sPort }"/>
+ </div>
+ </div>
+
+ <div class="col-md-4">
+ <div class="form-group">
+ <label><spring:message code="domain"></spring:message>:</label>
+ <input name="domain" type="text" class="form-control" value="${log.domain }"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- /筛选搜索内容栏 结束-->
+ </form:form>
+ </div>
+ <sys:message content="${message}"/>
+ <div class="table-responsive">
+
+ <table id="contentTable" class="table table-striped table-bordered table-condensed text-nowrap logTb">
+ <thead>
+ <tr>
+ <th><spring:message code="log"/></th>
+<%-- <th class="sort-column cfg_id " isVisible="false" column="cfg_id"><spring:message code="cfg_id"/></th> --%>
+<%-- <th class="sort-column service" isVisible="false" column="action"><spring:message code="action"/></th> --%>
+ <th class="sort-column found_time" column="found_time"><spring:message code="found_time"/></th>
+ <th class="sort-column recv_time" isVisible="false" column="recv_time"><spring:message code="recv_time"/></th>
+ <th class="sort-column entrance_id" isVisible="false" column="entrance_id"><spring:message code="entrance_id"/></th>
+
+ <th class="sort-column domain" column="domain"><spring:message code="domain"/></th>
+ <th class="sort-column account" column="account"><spring:message code="account"/></th>
+ <th class="sort-column phone_number" column="phone_number"><spring:message code="phone_number"/></th>
+ <th class="sort-column email" column="email"><spring:message code="email"/></th>
+
+ <th class="sort-column cap_ip" isVisible="false" column="clj_ip"><spring:message code="clj_ip"/></th>
+ <th class="sort-column trans_proto" column="transport_layer_protocol"><spring:message code="transport_layer_protocol"/></th>
+ <th class="sort-column addr_type" column="addr_type"><spring:message code='addr_type'/></th>
+ <th class="sort-column d_ip" column="server_ip"><spring:message code="server_ip"/></th>
+ <th class="sort-column s_ip" column="client_ip"><spring:message code="client_ip"/></th>
+ <th class="sort-column d_port" column="server_port"><spring:message code="server_port"/></th>
+ <th class="sort-column s_port" column="client_port"><spring:message code="client_port"/></th>
+
+ <th class="sort-column device_id" isVisible="false" column="deviceid"><spring:message code="deviceid"/></th>
+ <th class="sort-column link_id" isVisible="false" column="link_id"><spring:message code="link_id"/></th>
+ <th class="sort-column encap_type" column="encap_type"><spring:message code="encap_type"/></th>
+ <th class="sort-column direction" column="direction"><spring:message code="direction"/></th>
+ <th class="sort-column inner_smac" column="inner_smac"><spring:message code="inner_smac"/></th>
+ <th class="sort-column inner_dmac" column="inner_dmac"><spring:message code="inner_dmac"/></th>
+ <th class="sort-column stream_dir" column="stream_type"><spring:message code="stream_type"/></th>
+
+ <th class="sort-column addr_list" column="nest_addr_list"><spring:message code="nest_addr_list"/></th>
+ <th class="sort-column server_locate" column="server_locate"><spring:message code='server_locate'/></th>
+ <th class="sort-column client_locate" column="client_locate"><spring:message code='client_locate'/></th>
+ <th class="sort-column s_asn" isVisible="false" column="s_asn"><spring:message code='s_asn'/></th>
+ <th class="sort-column d_asn" isVisible="false" column="d_asn"><spring:message code='d_asn'/></th>
+ <th class="sort-column s_subscribe_id" isVisible="false" column="s_subscribe_id"><spring:message code='s_subscribe_id'/></th>
+ <th class="sort-column d_subscribe_id" isVisible="false" column="d_subscribe_id"><spring:message code='d_subscribe_id'/></th>
+ <%-- <th class="sort-column user_region" isVisible="false" column="user_region"><spring:message code='user_region'/></th> --%>
+ <c:if test="${fns:getUser().isAdmin()}"><th class="sort-column scene_file" column="scene_file"><spring:message code='scene_file'/></th></c:if>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="log" items="${page.list }" varStatus="status">
+ <tr>
+ <td>
+<%-- <span id="open${status.index}" class="log-open-cfg" compileId="${log.cfgId }"> ▷ </span><span style="display: none" id="close${status.index}" > ▼ </span> --%>
+ <a href="javascript:void(0)" name="viewLogInfo" url="${ctx}/ntc/website/ajaxHttpSubList" compileId="${log.cfgId }" ><i class="icon-book-open"></i></a>
+<!-- </td> -->
+<%-- <td>${log.cfgId }</td> --%>
+ <td>${log.foundTime }</td>
+ <td>${log.recvTime}</td>
+ <td>
+ <%-- <c:set var="entrances">${log.entranceId }</c:set>
+ <c:forEach items="${fns:getDictList('ENTRANCE')}" var="dic">
+ <c:if test="${dic.itemCode eq log.entranceId}">
+ <c:set var="entrances">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${entrances}"/> --%>
+ ${log.entranceId }
+ </td>
+
+ <td >${log.domain}</td>
+ <td >${log.account}</td>
+ <td >${log.phoneNumber}</td>
+ <td >${log.email}</td>
+
+ <td >${log.capIp}</td>
+ <td>
+ <c:set var="transProtos">${log.transProto }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_PROTOCOL')}" var="dic">
+ <c:if test="${dic.itemCode eq log.transProto}">
+ <c:set var="transProtos">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${transProtos}"/>
+ </td>
+ <td>
+ <c:set var="addrTypes">${log.addrType }</c:set>
+ <c:forEach items="${fns:getDictList('IP_TYPE')}" var="dic">
+ <c:if test="${log.addrType==dic.itemCode}">
+ <c:set var="addrTypes">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${addrTypes}"/>
+ </td>
+ <td>${log.dIp}</td>
+ <td>${log.sIp}</td>
+ <td>${log.dPort}</td>
+ <td>${log.sPort}</td>
+
+ <td>
+ <c:set var="deviceIds">${log.deviceId }</c:set>
+ <c:forEach items="${fns:getDictList('DEVICE')}" var="device">
+ <c:if test="${device.itemCode eq log.deviceId}">
+ <c:set var="deviceIds">${device.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${deviceIds}"/>
+ </td>
+ <td>
+ <c:set var="linkIds">${log.linkId }</c:set>
+ <c:forEach items="${fns:getDictList('LINK')}" var="link">
+ <c:if test="${link.itemCode eq log.linkId}">
+ <c:set var="linkIds">${link.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${linkIds}"/>
+ </td>
+ <td>
+ <c:set var="encapTypes">${log.encapType }</c:set>
+ <c:forEach items="${fns:getDictList('ENCAP_TYPE')}" var="encapType">
+ <c:if test="${encapType.itemCode eq log.encapType}">
+ <c:set var="encapTypes">${encapType.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${encapTypes}"/>
+ </td>
+ <td>
+ <c:set var="directions">${log.direction }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_DIRECTION')}" var="direction">
+ <c:if test="${direction.itemCode eq log.direction}">
+ <c:set var="directions">${direction.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${directions}"/>
+ </td>
+ <td>${log.innerSmac }</td>
+ <td>${log.innerDmac }</td>
+ <td>
+ <c:set var="streamDirs">${log.streamDir }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_STREAM_TYPE')}" var="streamType">
+ <c:if test="${streamType.itemCode eq log.streamDir}">
+ <c:set var="streamDirs">${streamType.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${streamDirs}"/>
+ </td>
+ <td>${log.addrList }</td>
+ <td>${log.serverLocate}</td>
+ <td>${log.clientLocate}</td>
+ <td>${log.sAsn}</td>
+ <td>${log.dAsn}</td>
+ <td>${log.sSubscribeId}</td>
+ <td>${log.dSubscribeId}</td>
+ <%-- <td>${log.userRegion}</td> --%>
+ <c:if test="${fns:getUser().isAdmin()}"><td>${log.sceneFile}</td></c:if>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+ <div class="page">${page}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+</body>
+</html>