浏览代码

重构API异常提示方案,改为响应自定义header方式

luoshi 6 年之前
父节点
当前提交
230d3ff07b
共有 16 个文件被更改,包括 75 次插入117 次删除
  1. 26 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/ApiException.java
  2. 0 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/ExamNotAccessibleException.java
  3. 0 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserNotAdminException.java
  4. 0 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserPasswordErrorException.java
  5. 0 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserUnExistException.java
  6. 3 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/service/validator/AdminUserValidator.java
  7. 3 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/service/validator/DefaultValidator.java
  8. 27 0
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/BaseApiController.java
  9. 3 3
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamInfoController.java
  10. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamQuestionController.java
  11. 5 5
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java
  12. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/LoginController.java
  13. 3 4
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java
  14. 0 50
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/Test.java
  15. 2 0
      stmms-web/src/main/java/cn/com/qmth/stmms/api/utils/AuthInfoUtils.java
  16. 1 1
      stmms-web/src/main/webapp/WEB-INF/application.properties

+ 26 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/ApiException.java

@@ -0,0 +1,26 @@
+package cn.com.qmth.stmms.biz.api.auth.exception;
+
+public class ApiException extends RuntimeException {
+
+    private static final long serialVersionUID = -4104244511495148577L;
+
+    private int code;
+
+    private ApiException(int code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public static final ApiException USER_UNEXISTS = new ApiException(401, "user unexists");
+
+    public static final ApiException USER_PASSWORD_ERROR = new ApiException(401, "user password error");
+
+    public static final ApiException USER_NOT_ADMIN = new ApiException(401, "user is not admin");
+
+    public static final ApiException EXAM_NOT_ACCESSIBLED = new ApiException(401, "user cannot access specified exam");
+
+}

+ 0 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/ExamNotAccessibleException.java

@@ -1,11 +0,0 @@
-package cn.com.qmth.stmms.biz.api.auth.exception;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(value = HttpStatus.UNAUTHORIZED, reason = "用户没有访问该考试的权限")
-public class ExamNotAccessibleException extends RuntimeException {
-
-    private static final long serialVersionUID = -4572037880420043500L;
-
-}

+ 0 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserNotAdminException.java

@@ -1,11 +0,0 @@
-package cn.com.qmth.stmms.biz.api.auth.exception;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(value = HttpStatus.UNAUTHORIZED, reason = "用户没有管理员权限")
-public class UserNotAdminException extends RuntimeException {
-
-    private static final long serialVersionUID = -2421416160871608645L;
-
-}

+ 0 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserPasswordErrorException.java

@@ -1,11 +0,0 @@
-package cn.com.qmth.stmms.biz.api.auth.exception;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(value = HttpStatus.UNAUTHORIZED, reason = "用户密码错误")
-public class UserPasswordErrorException extends RuntimeException {
-
-    private static final long serialVersionUID = 2155033130710649371L;
-
-}

+ 0 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/exception/UserUnExistException.java

@@ -1,11 +0,0 @@
-package cn.com.qmth.stmms.biz.api.auth.exception;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(value = HttpStatus.UNAUTHORIZED, reason = "用户不存在")
-public class UserUnExistException extends RuntimeException {
-
-    private static final long serialVersionUID = -4572037880420043500L;
-
-}

+ 3 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/service/validator/AdminUserValidator.java

@@ -5,8 +5,7 @@ import javax.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import cn.com.qmth.stmms.biz.api.auth.exception.UserNotAdminException;
-import cn.com.qmth.stmms.biz.api.auth.exception.UserUnExistException;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
 import cn.com.qmth.stmms.biz.api.auth.interfaces.AuthValidator;
 import cn.com.qmth.stmms.biz.api.auth.model.AuthInfo;
 import cn.com.qmth.stmms.biz.user.model.User;
@@ -27,12 +26,12 @@ public class AdminUserValidator implements AuthValidator {
     public boolean validate(AuthInfo auth) {
         User user = auth.getLoginUser();
         if (user == null) {
-            throw new UserUnExistException();
+            throw ApiException.USER_UNEXISTS;
         }
         if (user.getRoles().contains(Role.CAMPUS_ADMIN) || user.getRoles().contains(Role.SCHOOL_ADMIN)) {
             return true;
         } else {
-            throw new UserNotAdminException();
+            throw ApiException.USER_NOT_ADMIN;
         }
     }
 

+ 3 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/api/auth/service/validator/DefaultValidator.java

@@ -5,8 +5,7 @@ import javax.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import cn.com.qmth.stmms.biz.api.auth.exception.UserPasswordErrorException;
-import cn.com.qmth.stmms.biz.api.auth.exception.UserUnExistException;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
 import cn.com.qmth.stmms.biz.api.auth.interfaces.AuthValidator;
 import cn.com.qmth.stmms.biz.api.auth.model.AuthInfo;
 import cn.com.qmth.stmms.biz.api.auth.model.BasicAuthInfo;
@@ -47,10 +46,10 @@ public class DefaultValidator implements AuthValidator {
                 info.setLoginUser(RoleAuthUtil.buildRoleAuthByUser(user, roleService));
                 return true;
             } else {
-                throw new UserPasswordErrorException();
+                throw ApiException.USER_PASSWORD_ERROR;
             }
         } else {
-            throw new UserUnExistException();
+            throw ApiException.USER_UNEXISTS;
         }
     }
 

+ 27 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/BaseApiController.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.stmms.api.controller;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+import cn.com.qmth.stmms.admin.exam.parameter.BaseParameterController;
+import cn.com.qmth.stmms.api.utils.AuthInfoUtils;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
+
+public class BaseApiController extends BaseParameterController {
+
+    @ExceptionHandler
+    public void exception(HttpServletResponse response, Exception ex) throws IOException {
+        response.addHeader(AuthInfoUtils.ERROR_MESSAGE_HEADER_KEY, StringUtils.trimToEmpty(ex.getMessage()));
+        if (ex instanceof ApiException) {
+            ApiException e = (ApiException) ex;
+            response.sendError(e.getCode());
+        } else {
+            response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value());
+        }
+    }
+}

+ 3 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamInfoController.java

@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import cn.com.qmth.stmms.admin.vo.ExamSubjectVO;
 import cn.com.qmth.stmms.biz.api.auth.annotation.AuthValidate;
-import cn.com.qmth.stmms.biz.api.auth.exception.ExamNotAccessibleException;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
 import cn.com.qmth.stmms.biz.campus.model.Campus;
 import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -32,7 +32,7 @@ import net.sf.json.JSONObject;
 
 @Controller("examInfoApiController")
 @RequestMapping("/api")
-public class ExamInfoController {
+public class ExamInfoController extends BaseApiController {
 
     @Autowired
     private ExamService examService;
@@ -134,7 +134,7 @@ public class ExamInfoController {
                 result.accumulate("code", "");
             }
         } else {
-            throw new ExamNotAccessibleException();
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         return result;
     }

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamQuestionController.java

@@ -19,7 +19,7 @@ import net.sf.json.JSONObject;
 
 @Controller("examQuestionApiController")
 @RequestMapping("/api")
-public class ExamQuestionController {
+public class ExamQuestionController extends BaseApiController {
 
     @Autowired
     private ExamQuestionService questionService;

+ 5 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java

@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import cn.com.qmth.stmms.api.utils.AESUtil;
 import cn.com.qmth.stmms.biz.api.auth.annotation.AuthValidate;
-import cn.com.qmth.stmms.biz.api.auth.exception.ExamNotAccessibleException;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
 import cn.com.qmth.stmms.biz.campus.model.Campus;
 import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -47,7 +47,7 @@ import net.sf.json.JSONObject;
 
 @Controller("examStudentApiController")
 @RequestMapping("/api")
-public class ExamStudentController {
+public class ExamStudentController extends BaseApiController {
 
     protected static Logger logger = LoggerFactory.getLogger(ExamStudentController.class);
 
@@ -88,7 +88,7 @@ public class ExamStudentController {
                 }
             }
         } else {
-            throw new ExamNotAccessibleException();
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         return array;
     }
@@ -108,7 +108,7 @@ public class ExamStudentController {
                 return obj.getPicCount();
             }
         } else {
-            throw new ExamNotAccessibleException();
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         return -1;
     }
@@ -564,7 +564,7 @@ public class ExamStudentController {
         User user = RequestUtils.getApiUser(request);
         Exam exam = examService.findById(examId);
         if (exam == null || !exam.getSchoolId().equals(user.getSchoolId())) {
-            throw new ExamNotAccessibleException();
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         // 验证考生是否存在
         ExamStudent student = examStudentService.findByExamIdAndExamNumber(examId, examNumber);

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/LoginController.java

@@ -17,7 +17,7 @@ import net.sf.json.JSONObject;
 
 @Controller("loginApiController")
 @RequestMapping("/api")
-public class LoginController {
+public class LoginController extends BaseApiController {
 
     @AuthValidate("adminUser")
     @RequestMapping(value = "/user/login", method = RequestMethod.GET)

+ 3 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java

@@ -18,10 +18,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
-import cn.com.qmth.stmms.admin.exam.parameter.BaseParameterController;
 import cn.com.qmth.stmms.api.utils.ScanStudentParameter;
 import cn.com.qmth.stmms.biz.api.auth.annotation.AuthValidate;
-import cn.com.qmth.stmms.biz.api.auth.exception.ExamNotAccessibleException;
+import cn.com.qmth.stmms.biz.api.auth.exception.ApiException;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
@@ -34,7 +33,7 @@ import net.sf.json.JSONObject;
 
 @Controller
 @RequestMapping("/api/scan")
-public class ScanController extends BaseParameterController {
+public class ScanController extends BaseApiController {
 
     protected static Logger log = LoggerFactory.getLogger(ScanController.class);
 
@@ -66,7 +65,7 @@ public class ScanController extends BaseParameterController {
         Exam exam = examService.findById(examId);
         // 判断上传权限
         if (exam == null || exam.getSchoolId().equals(user.getSchoolId())) {
-            throw new ExamNotAccessibleException();
+            throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
 
         if (scStudentParameter != null && scStudentParameter.length > 0) {

+ 0 - 50
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/Test.java

@@ -1,50 +0,0 @@
-package cn.com.qmth.stmms.api.controller;
-
-public class Test {
-
-	public static void main(String[] args) {
-		boolean convert = true;
-		char[] s = "100010018072128141004".toCharArray();
-		String[] str = new String[s.length];
-		for(int i=0;i<str.length;i++){
-			str[i] = String.valueOf(s[i]);
-		}
-		String[] diploma = {"D","0","1","13"};
-    	String[] bachelorDegree = {"F","1","1","13"};
-    	
-    	if(convert){
-    		if(str[Integer.parseInt(diploma[2])-1].equals(diploma[1])){
-    			str[Integer.parseInt(diploma[2])-1]=diploma[0];
-    		}
-    		if(str[Integer.parseInt(diploma[3])-1].equals(diploma[1])){
-    			str[Integer.parseInt(diploma[3])-1]=diploma[0];
-    		}
-    		if(str[Integer.parseInt(bachelorDegree[2])-1].equals(bachelorDegree[1])){
-    			str[Integer.parseInt(bachelorDegree[2])-1]=bachelorDegree[0];
-    		}
-    		if(str[Integer.parseInt(bachelorDegree[3])-1].equals(bachelorDegree[1])){
-    			str[Integer.parseInt(bachelorDegree[3])-1]=bachelorDegree[0];
-    		}
-    	}else{
-    		if(str[Integer.parseInt(diploma[2])-1].equals(diploma[0])){
-    			str[Integer.parseInt(diploma[2])-1]=diploma[1];
-    		}
-    		if(str[Integer.parseInt(diploma[3])-1].equals(diploma[0])){
-    			str[Integer.parseInt(diploma[3])-1]=diploma[1];
-    		}
-    		if(str[Integer.parseInt(bachelorDegree[2])-1].equals(bachelorDegree[0])){
-    			str[Integer.parseInt(bachelorDegree[2])-1]=bachelorDegree[1];
-    		}
-    		if(str[Integer.parseInt(bachelorDegree[3])-1].equals(bachelorDegree[0])){
-    			str[Integer.parseInt(bachelorDegree[3])-1]=bachelorDegree[1];
-    		}
-    	}
-    	StringBuffer sb = new StringBuffer();
-		for(String ss: str){
-			sb.append(ss);
-		}
-    	System.out.println(sb.toString());
-
-	}
-
-}

+ 2 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/utils/AuthInfoUtils.java

@@ -8,6 +8,8 @@ public class AuthInfoUtils {
 
     public static final String AUTH_INFO_HEADER_KEY = "auth-info";
 
+    public static final String ERROR_MESSAGE_HEADER_KEY = "error-info";
+
     public static String getAuthInfoValue(HttpServletRequest request) {
         return StringUtils.trimToNull(request.getHeader(AUTH_INFO_HEADER_KEY));
     }

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -1,7 +1,7 @@
 #jdbc config
 driverClassName=com.mysql.jdbc.Driver
 #jdbc config
-url=jdbc:mysql://192.168.10.30:3306/stmms_gx_init?useUnicode=true&characterEncoding=UTF-8
+url=jdbc:mysql://192.168.10.30:3306/stmms_gx?useUnicode=true&characterEncoding=UTF-8
 username=root
 password=root