xusl 1 rok temu
rodzic
commit
5a59697d1a

+ 4 - 0
backend/src/main/java/com/jiayue/ssi/backenum/BusinessType.java

@@ -84,4 +84,8 @@ public enum BusinessType
      * 连接超时
      */
     CTO,
+    /**
+     * IP异常
+     */
+    IPYC,
 }

+ 6 - 0
backend/src/main/java/com/jiayue/ssi/controller/SysOperlogController.java

@@ -254,6 +254,12 @@ public class SysOperlogController {
                 // 操作ip个数统计
                 int ips = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(s -> s.getOperIp()))), ArrayList::new)).size();
                 recordMap.put("ips", ips + "");
+                // 越权访问统计
+                List<SysOperLog> yqfwList = list.stream().filter(sysOperLog -> sysOperLog.getBusinessType() == 2).collect(Collectors.toList());
+                recordMap.put("yqfw", yqfwList.size() + "");
+                // IP地址异常统计
+                List<SysOperLog> ipycList = list.stream().filter(sysOperLog -> sysOperLog.getBusinessType() == 17).collect(Collectors.toList());
+                recordMap.put("ipyc", ipycList.size() + "");
                 resultList.add(recordMap);
             });
             Collections.sort(resultList, new Comparator<Map<String, String>>() {

+ 14 - 0
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -226,12 +226,20 @@ public class SysUserController {
             for (SysApprove sysApprove1:sysApproveList){
                 String approveUsername = sysApprove1.getUsername();
                 String approveIdcard = SM2CryptUtils.decrypt(sysApprove1.getIdcard(), SecretKeyConstants.SERVER_PRIVATE_KEY);
+                String approvePhonenumber = SM2CryptUtils.decrypt(sysApprove1.getPhonenumber(), SecretKeyConstants.SERVER_PRIVATE_KEY);
+                String approveMailbox = SM2CryptUtils.decrypt(sysApprove1.getMailbox(), SecretKeyConstants.SERVER_PRIVATE_KEY);
                 if (username.equals(approveUsername)){
                     return ResponseVO.fail("账号"+username + "在待审批,不能再次新增!");
                 }
                 if (user.getIdcard().equals(approveIdcard)){
                     return ResponseVO.fail("身份证"+user.getIdcard() + "在待审批中,不能再次新增!");
                 }
+                if (user.getPhonenumber().equals(approvePhonenumber)){
+                    return ResponseVO.fail("手机号码"+user.getPhonenumber() + "在待审批中,不能再次新增!");
+                }
+                if (user.getMailbox().equals(approveMailbox)){
+                    return ResponseVO.fail("用户邮箱"+user.getMailbox() + "在待审批中,不能再次新增!");
+                }
             }
 
             List<SysUser> sysUserList = sysUserService.queryAllUserByDecrypt();
@@ -242,6 +250,12 @@ public class SysUserController {
                 if (user.getIdcard().equals(sysUser.getIdcard())){
                     return ResponseVO.fail("身份证"+user.getIdcard() + "存在,不能再次新增!");
                 }
+                if (user.getPhonenumber().equals(sysUser.getPhonenumber())){
+                    return ResponseVO.fail("手机号码"+user.getPhonenumber() + "存在,不能再次新增!");
+                }
+                if (user.getMailbox().equals(sysUser.getMailbox())){
+                    return ResponseVO.fail("用户邮箱"+user.getMailbox() + "存在,不能再次新增!");
+                }
             }
 
             sysApprove.setUsertype(user.getUsertype());

+ 70 - 0
backend/src/main/java/com/jiayue/ssi/filter/InterfaceLimitFilter.java

@@ -1,9 +1,15 @@
 package com.jiayue.ssi.filter;
 
+import com.jiayue.ssi.backenum.AuditType;
+import com.jiayue.ssi.backenum.BusinessStatus;
+import com.jiayue.ssi.backenum.BusinessType;
 import com.jiayue.ssi.constant.CacheConstants;
 import com.jiayue.ssi.entity.SysBlacklist;
+import com.jiayue.ssi.entity.SysOperLog;
+import com.jiayue.ssi.factory.OperateLogFactory;
 import com.jiayue.ssi.service.SysBlacklistService;
 import com.jiayue.ssi.util.*;
+import io.jsonwebtoken.Claims;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.annotation.Order;
@@ -64,6 +70,38 @@ public class InterfaceLimitFilter extends OncePerRequestFilter {
                 // 当前时间
                 Date currentDate = new Date();
                 if (currentDate.after(startDate) && currentDate.before(endDate)){
+                    String token = request.getHeader("Authorization");
+                    JwtTokenUtil jwtTokenUtil = new JwtTokenUtil();
+                    Claims claims = jwtTokenUtil.getClaimsFromToken(token);
+                    String username="";
+                    if (claims==null){
+                        username = "未知用户";
+                    }
+                    else{
+                        username = claims.getSubject();
+                    }
+                    String openUrl = request.getParameter("accessUrl");
+                    SysOperLog operLog = new SysOperLog();
+                    operLog.setStatus(BusinessStatus.FAIL.ordinal());
+                    // 请求的地址
+                    String ip = IPUtils.getIpAddr();
+                    operLog.setOperIp(ip);
+                    operLog.setOperUrl(openUrl);
+                    operLog.setOperName(username);
+                    // 设置请求方式
+                    operLog.setRequestMethod("");
+                    operLog.setCreateBy(username);
+                    // 设置action动作
+                    operLog.setBusinessType(BusinessType.IPYC.ordinal());
+                    // 设置标题
+                    operLog.setTitle("IP异常");
+                    // 操作描述
+                    operLog.setOperdesc("IP异常");
+                    // 审计类型
+                    operLog.setAuditType(AuditType.SYS.ordinal());
+                    // 保存数据库
+                    OperateLogFactory.recordOper(operLog);
+
                     log.info("发送邮箱IP异常访问\r\n" +
                             "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓邮箱内容↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"+
                             "\r\n  IP:"+remoteIp+"异常访问系统 \r\n"     +
@@ -77,6 +115,38 @@ public class InterfaceLimitFilter extends OncePerRequestFilter {
                 }
             }
             else{
+                String token = request.getHeader("Authorization");
+                JwtTokenUtil jwtTokenUtil = new JwtTokenUtil();
+                Claims claims = jwtTokenUtil.getClaimsFromToken(token);
+                String username="";
+                if (claims==null){
+                    username = "未知用户";
+                }
+                else{
+                    username = claims.getSubject();
+                }
+                String openUrl = request.getParameter("accessUrl");
+                SysOperLog operLog = new SysOperLog();
+                operLog.setStatus(BusinessStatus.FAIL.ordinal());
+                // 请求的地址
+                String ip = IPUtils.getIpAddr();
+                operLog.setOperIp(ip);
+                operLog.setOperUrl(openUrl);
+                operLog.setOperName(username);
+                // 设置请求方式
+                operLog.setRequestMethod("");
+                operLog.setCreateBy(username);
+                // 设置action动作
+                operLog.setBusinessType(BusinessType.IPYC.ordinal());
+                // 设置标题
+                operLog.setTitle("IP异常");
+                // 操作描述
+                operLog.setOperdesc("IP异常");
+                // 审计类型
+                operLog.setAuditType(AuditType.SYS.ordinal());
+                // 保存数据库
+                OperateLogFactory.recordOper(operLog);
+
                 log.info("发送邮箱IP异常访问\r\n" +
                         "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓邮箱内容↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓"+
                         "\r\n  IP:"+remoteIp+"异常访问系统 \r\n"     +

+ 4 - 1
ui/src/views/auditManager/operlog/index.vue

@@ -235,7 +235,8 @@ export default {
         {value: '9', label: '授权'},
         // {value: '10', label: '获取角色信息'},
         // {value: '11', label: '导出'},
-        {value: '16', label: '连接超时'}
+        {value: '16', label: '连接超时'},
+        {value: '17', label: 'IP异常'}
       ],
       ///** 审计类型(0=系统,1=业务) */
       auditTypeOptions: [
@@ -364,6 +365,8 @@ export default {
           belongTo = "清空数据"
         }else if (cellValue == "16") {
           belongTo = "连接超时"
+        }else if (cellValue == "17") {
+          belongTo = "IP异常"
         }
       }
       return belongTo

+ 2 - 0
ui/src/views/auditManager/operlogTotal/index.vue

@@ -38,6 +38,8 @@
         <vxe-table-column field="success" title="成功次数"/>
         <vxe-table-column field="fail" title="失败次数"/>
         <vxe-table-column field="ips" title="ip个数"/>
+        <vxe-table-column field="yqfw" title="越权访问个数"/>
+        <vxe-table-column field="ipyc" title="IP地址异常"/>
       </vxe-table>
     </div>
   </div>

+ 6 - 6
ui/src/views/sysManager/userManager/index.vue

@@ -193,20 +193,20 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="用户姓名" prop="nickname">
-              <el-input style="width: 220px" v-model="form.nickname" placeholder="请输入用户姓名" maxlength="30"/>
+            <el-form-item label="手机号码" prop="phonenumber">
+              <el-input style="width: 220px" v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" :disabled="edit"/>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="用户邮箱" prop="mailbox">
-              <el-input style="width: 220px" v-model="form.mailbox" placeholder="请输入邮箱" maxlength="50"/>
+            <el-form-item label="用户姓名" prop="nickname">
+              <el-input style="width: 220px" v-model="form.nickname" placeholder="请输入用户姓名" maxlength="30"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="手机号码" prop="phonenumber">
-              <el-input style="width: 220px" v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11"/>
+            <el-form-item label="用户邮箱" prop="mailbox">
+              <el-input style="width: 220px" v-model="form.mailbox" placeholder="请输入邮箱" maxlength="50" :disabled="edit"/>
             </el-form-item>
           </el-col>
         </el-row>