qinchao преди 4 години
родител
ревизия
aec2da3a9f

+ 4 - 7
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/ExamController.java

@@ -1480,15 +1480,12 @@ public class ExamController extends ControllerSupport {
                 msg.append("  限制类型不能为空");
                 hasError = true;
             }
-            Integer type = null;
             IpLimitType ipLimitType = IpLimitType.formByName(line[1]);
             if(ipLimitType==null){
                 msg.append("  不符合格式的限制类型");
                 hasError = true;
-            } else {
-                type = ipLimitType.getId();
             }
-            entity.setLimitType(type);
+            entity.setLimitType(ipLimitType);
 
             Date date = new Date();
             entity.setCreationTime(date);
@@ -1526,8 +1523,7 @@ public class ExamController extends ControllerSupport {
         List<Object[]> datas = Lists.newArrayList();
 
         for (ExamIpLimitEntity cur : list) {
-            IpLimitType ipLimitType = IpLimitType.formById(cur.getLimitType());
-            String type = ipLimitType == null ? "" : ipLimitType.getName();
+            String type = cur.getLimitType() == null ? "" : cur.getLimitType().getName();
             datas.add(new Object[]{cur.getIp(), type});
         }
 
@@ -1558,8 +1554,9 @@ public class ExamController extends ControllerSupport {
     @ApiOperation(value = "检查是否Ip限制",notes = "检查是否Ip限制")
     @GetMapping("ipLimit/{examId}")
     public Map<String, Object> ipLimited(HttpServletRequest request, @PathVariable Long examId) {
+        String realIp = getIp(request);
         User accessUser = getAccessUser();
-        boolean ipLimited = examService.getIpLimited(request, examId, accessUser);
+        boolean ipLimited = examService.getIpLimited(realIp, examId, accessUser);
         Map<String, Object> map = new HashMap<>();
         map.put("limited",ipLimited);
         if (ipLimited) {

+ 2 - 1
examcloud-core-examwork-dao/src/main/java/cn/com/qmth/examcloud/core/examwork/dao/ExamIpLimitRepo.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.examwork.dao;
 
 import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamIpLimitEntity;
+import cn.com.qmth.examcloud.core.examwork.dao.enums.IpLimitType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -21,7 +22,7 @@ public interface ExamIpLimitRepo extends JpaRepository<ExamIpLimitEntity, Long>,
 	@Transactional
 	@Query(value = "update ExamIpLimitEntity t set t.limitType = ?1" +
 			" where t.examId = ?2 and t.id in ?3")
-	int updateLimitType(Integer LimitType, Long examId, List<Long> ids);
+	int updateLimitType(IpLimitType LimitType, Long examId, List<Long> ids);
 
 	int deleteByIdIn(List<Long> ipIds);
 

+ 7 - 3
examcloud-core-examwork-dao/src/main/java/cn/com/qmth/examcloud/core/examwork/dao/entity/ExamIpLimitEntity.java

@@ -1,9 +1,12 @@
 package cn.com.qmth.examcloud.core.examwork.dao.entity;
 
+import cn.com.qmth.examcloud.core.examwork.dao.enums.IpLimitType;
 import cn.com.qmth.examcloud.web.jpa.JpaEntity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
@@ -40,7 +43,8 @@ public class ExamIpLimitEntity extends JpaEntity {
 	/**
 	 * 限制类型:1禁止访问,0允许访问
 	 */
-	private Integer limitType;
+	@Enumerated(EnumType.STRING)
+	private IpLimitType limitType;
 
 
 	public Long getId() {
@@ -67,11 +71,11 @@ public class ExamIpLimitEntity extends JpaEntity {
 		this.examId = examId;
 	}
 
-	public Integer getLimitType() {
+	public IpLimitType getLimitType() {
 		return limitType;
 	}
 
-	public void setLimitType(Integer limitType) {
+	public void setLimitType(IpLimitType limitType) {
 		this.limitType = limitType;
 	}
 }

+ 2 - 3
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/ExamService.java

@@ -10,7 +10,6 @@ import cn.com.qmth.examcloud.core.examwork.service.bean.ExamInfo;
 import cn.com.qmth.examcloud.core.examwork.service.bean.ExamIpLimitInfo;
 import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSpecialSettingsInfo;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.util.List;
 import java.util.Map;
@@ -112,12 +111,12 @@ public interface ExamService {
     /***
      * Description 查询当前用户当前考试是否被限制
      *
-     * @param request
+     * @param realIp
      * @param examId
      * @param accessUser
      * @return boolean
      */
-    boolean getIpLimited(HttpServletRequest request, Long examId, User accessUser);
+    boolean getIpLimited(String realIp, Long examId, User accessUser);
 
     /***
      * Description 保存ip限制信息

+ 9 - 19
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/impl/ExamServiceImpl.java

@@ -64,10 +64,16 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.criteria.Predicate;
-import javax.servlet.http.HttpServletRequest;
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -873,7 +879,7 @@ public class ExamServiceImpl implements ExamService {
     }
 
     @Override
-    public boolean getIpLimited(HttpServletRequest request, Long examId, User accessUser) {
+    public boolean getIpLimited(String realIp, Long examId, User accessUser) {
         //是否开启Ip限制
         ExamPropertyCacheBean ipLimitProperty = CacheHelper.getExamProperty(examId, "IP_LIMIT");
         boolean ipLimited = ipLimitProperty!=null && StringUtil.isTrue(ipLimitProperty.getValue());
@@ -883,8 +889,6 @@ public class ExamServiceImpl implements ExamService {
         DynamicEnum ipCenterLimit = manager.getByName("IP_CENTER_LIMIT");
 
         if (ipLimited) {
-            String realIp = getIp(request);
-            realIp = realIp.trim();
             //整体控制
             Integer totalLimit = getExamLimitProperty(examId, ipTotalLimit.getId(), 0);
             if (totalLimit == 1) {
@@ -931,20 +935,6 @@ public class ExamServiceImpl implements ExamService {
         }
     }
 
-    private String getIp(HttpServletRequest request) {
-        String ip = request.getHeader("x-forwarded-for");
-        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("Proxy-Client-IP");
-        }
-        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("WL-Proxy-Client-IP");
-        }
-        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
-            ip = request.getRemoteAddr();
-        }
-        return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;
-    }
-
     @Override
     public void saveIpLimit(String ids, ExamIpLimitEntity entity) {
         //ids不为空,说明是批量设置限制类型