Bladeren bron

尚在考试中不允许登录

deason 6 jaren geleden
bovenliggende
commit
9ba4644f00
1 gewijzigde bestanden met toevoegingen van 25 en 10 verwijderingen
  1. 25 10
      src/main/java/cn/com/qmth/examcloud/app/core/config/TokenFilter.java

+ 25 - 10
src/main/java/cn/com/qmth/examcloud/app/core/config/TokenFilter.java

@@ -7,7 +7,6 @@
 
 package cn.com.qmth.examcloud.app.core.config;
 
-import cn.com.qmth.examcloud.app.core.exception.ApiException;
 import cn.com.qmth.examcloud.app.model.Constants;
 import cn.com.qmth.examcloud.app.model.LoginInfo;
 import cn.com.qmth.examcloud.app.model.Result;
@@ -52,25 +51,29 @@ public class TokenFilter implements Filter {
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
             throws IOException, ServletException {
         HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
 
         //移动端设备请求必须带“设备编号”参数
         /*String deviceId = request.getHeader(Constants.PARAM_DEVICE_ID);
         if (StringUtils.isBlank(deviceId)) {
             Result result = new Result().error("[APP] deviceId must be not empty.");
-            HttpServletResponse response = (HttpServletResponse) servletResponse;
-            this.render(response, result.toString());
+            this.render(response, result.toString(), true);
             return;
         }*/
 
-        CustomHttpServletRequest customRequest = this.initCustomRequest(request);
+        Continue reqContinue = new Continue();
+        CustomHttpServletRequest customRequest = this.initCustomRequest(request, response, reqContinue);
         if (customRequest != null) {
             filterChain.doFilter(customRequest, servletResponse);
             return;
         }
-        filterChain.doFilter(servletRequest, servletResponse);
+
+        if (reqContinue.yes) {
+            filterChain.doFilter(servletRequest, servletResponse);
+        }
     }
 
-    private CustomHttpServletRequest initCustomRequest(HttpServletRequest request) {
+    private CustomHttpServletRequest initCustomRequest(HttpServletRequest request, HttpServletResponse response, Continue reqContinue) {
         String url = request.getServletPath();
         if (url.contains("/user/login") || url.contains("/user/verify")) {
             //处理登录接口
@@ -87,7 +90,9 @@ public class TokenFilter implements Filter {
 
             boolean isDoing = userAuthService.isDoingExam(rootOrgId, accountType, account);
             if (isDoing) {
-                throw new ApiException("尚在考试中不允许登录!");
+                reqContinue.yes = false;
+                this.renderError(response, new Result().error("尚在考试中不允许登录!").toString());
+                return null;
             }
         }
 
@@ -118,7 +123,9 @@ public class TokenFilter implements Filter {
             if (loginInfo.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
                 boolean isDoing = userAuthService.isDoingExam(loginInfo.getRootOrgId(), loginInfo.getAccountType(), loginInfo.getAccount());
                 if (isDoing) {
-                    throw new ApiException("尚在考试中不允许登录!");
+                    reqContinue.yes = false;
+                    this.renderError(response, new Result().error("尚在考试中不允许登录!").toString());
+                    return null;
                 }
 
                 //判断原始登录Token是否在有效时间内,否则自动登录续期
@@ -162,10 +169,14 @@ public class TokenFilter implements Filter {
         return false;
     }
 
-    private void render(HttpServletResponse response, String json) {
+    private void renderError(HttpServletResponse response, String json) {
+        this.render(response, json, false);
+    }
+
+    private void render(HttpServletResponse response, String json, boolean isOk) {
         PrintWriter out = null;
         try {
-            response.setStatus(HttpStatus.OK.value());
+            response.setStatus(isOk ? HttpStatus.OK.value() : HttpStatus.INTERNAL_SERVER_ERROR.value());
             response.setCharacterEncoding("UTF-8");
             response.setContentType("application/json;charset=UTF-8");
             out = response.getWriter();
@@ -183,4 +194,8 @@ public class TokenFilter implements Filter {
         this.userAuthService = userAuthService;
     }
 
+    class Continue {
+        boolean yes = true;
+    }
+
 }