diff --git a/src/main/java/com/codesdream/ase/component/datamanager/JSONParameter.java b/src/main/java/com/codesdream/ase/component/datamanager/JSONParameter.java index 3fd6706..dbce1a6 100644 --- a/src/main/java/com/codesdream/ase/component/datamanager/JSONParameter.java +++ b/src/main/java/com/codesdream/ase/component/datamanager/JSONParameter.java @@ -58,44 +58,6 @@ public class JSONParameter { return JSON.toJSONString(object); } - // 根据对象构造获得标准的JSON响应字符串返回 - public String getJSONStandardRespond(Integer status, String msg, Object dataObject){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(status, msg); - respondObject.setData(dataObject); - return getJSONString(respondObject); - } - - // 获得标准的JSON响应字符串返回(404状态) - public String getJSONStandardRespond404(String msg){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(404, msg); - return getJSONString(respondObject); - } - - // 获得标准的JSON响应字符串返回(500状态) - public String getJSONStandardRespond500(String msg){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(500, msg); - return getJSONString(respondObject); - } - - // 获得标准的JSON响应字符串返回(200状态) - public String getJSONStandardRespond200(Object dataObject){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(200, "ok"); - respondObject.setData(dataObject); - return getJSONString(respondObject); - } - - // 获得标准的JSON响应字符串返回(403状态) - public String getJSONStandardRespond403(){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(403, "Forbidden"); - return getJSONString(respondObject); - } - - // 获得标准的JSON响应字符串返回(401状态) - public String getJSONStandardRespond401(){ - JSONBaseRespondObject respondObject = new JSONBaseRespondObject(401, "Unauthorized"); - return getJSONString(respondObject); - } - // 由JSON对象获得对应的Java对象 public T getJavaObject(JSONObject json, Class type){ return json.toJavaObject(type); diff --git a/src/main/java/com/codesdream/ase/component/datamanager/QuickJSONRespond.java b/src/main/java/com/codesdream/ase/component/datamanager/QuickJSONRespond.java new file mode 100644 index 0000000..ab2d6ab --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/datamanager/QuickJSONRespond.java @@ -0,0 +1,80 @@ +package com.codesdream.ase.component.datamanager; + +import com.codesdream.ase.component.json.respond.EmptyDataObjectRespond; +import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Component +public class QuickJSONRespond { + @Resource + private JSONParameter jsonParameter; + + // 根据对象构造获得标准的JSON响应字符串返回 + public String getJSONStandardRespond(Integer status, String msg, String info, Object dataObject){ + JSONBaseRespondObject respondObject = new JSONBaseRespondObject(status, msg); + if(info != null) respondObject.setInfo(info); + else respondObject.setInfo(null); + + respondObject.setData(dataObject); + return jsonParameter.getJSONString(respondObject); + } + + // 获得标准的JSON响应字符串返回特定状态码的和解释息 + public String getJSONStandardRespond(Integer code, String msg, String info){ + JSONBaseRespondObject respondObject = new JSONBaseRespondObject(code, msg); + if(info != null) respondObject.setInfo(info); + else respondObject.setInfo(null); + respondObject.setData(null); + return jsonParameter.getJSONString(respondObject); + } + + // 获得标准的JSON响应字符串返回(404状态) + public String getRespond404(String info){ + return getJSONStandardRespond(404, "Not Found", info); + } + + // 获得标准的JSON响应字符串返回(500状态) + public String getRespond500(String info){ + return getJSONStandardRespond(500, "Internal Server Error", info); + } + + // 获得标准的JSON响应字符串返回(200状态) + public String getRespond200(String info){ + return getJSONStandardRespond(200, "Ok", info); + } + + // 获得标准的JSON响应字符串返回(200状态) + public String getRespond200(String info, Object object){ + return getJSONStandardRespond(200, "Ok", info, object); + } + + // 获得标准的JSON响应字符串返回(403状态) + public String getRespond403(String info){ + return getJSONStandardRespond(403, "Forbidden", info); + } + + // 获得标准的JSON响应字符串返回(403状态) + public String getRespond406(String info){ + return getJSONStandardRespond(406, "Not Acceptable", info); + } + + // 获得标准的JSON响应字符串返回(501态) + public String getRespond501(String info){ + return getJSONStandardRespond(501, "Not Implemented", info) ; + } + + // 获得标准的JSON响应字符串返回(401状态) + public String getRespond401(String info){ + return getJSONStandardRespond(401, "Unauthorized", info); + } + + // 获得标准的JSON响应字符串返回(400状态) + public String getRespond400(String info){ + return getJSONStandardRespond(400, "Bad Request", info); + } + + +} diff --git a/src/main/java/com/codesdream/ase/component/json/request/UserRegisterChecker.java b/src/main/java/com/codesdream/ase/component/json/request/UserRegisterChecker.java new file mode 100644 index 0000000..491cda6 --- /dev/null +++ b/src/main/java/com/codesdream/ase/component/json/request/UserRegisterChecker.java @@ -0,0 +1,19 @@ +package com.codesdream.ase.component.json.request; + +import lombok.Data; + +@Data +public class UserRegisterChecker { + + // 学号 + private String studentId; + + // 密码 + private String password; + + // 密保问题 + private String userQuestion; + + // 密保答案 + private String userAnswer; +} diff --git a/src/main/java/com/codesdream/ase/component/json/respond/JSONBaseRespondObject.java b/src/main/java/com/codesdream/ase/component/json/respond/JSONBaseRespondObject.java index f180023..d1a2d2f 100644 --- a/src/main/java/com/codesdream/ase/component/json/respond/JSONBaseRespondObject.java +++ b/src/main/java/com/codesdream/ase/component/json/respond/JSONBaseRespondObject.java @@ -17,6 +17,9 @@ public class JSONBaseRespondObject extends JSONBaseObject { // 存放响应信息提示 private String msg = ""; + // 额外信息 + private String info = null; + // 状态 private Integer status = 200; diff --git a/src/main/java/com/codesdream/ase/component/json/respond/UserLoginCheckerJSONRespond.java b/src/main/java/com/codesdream/ase/component/json/respond/UserLoginCheckerJSONRespond.java index 208851a..6cbaeed 100644 --- a/src/main/java/com/codesdream/ase/component/json/respond/UserLoginCheckerJSONRespond.java +++ b/src/main/java/com/codesdream/ase/component/json/respond/UserLoginCheckerJSONRespond.java @@ -9,7 +9,8 @@ public class UserLoginCheckerJSONRespond { Boolean userExist = null; Boolean userBanned = null; Boolean loginStatus = null; - String respondInformation = ""; + String respondInformation = null; String token = null; + String uid = null; } diff --git a/src/main/java/com/codesdream/ase/component/permission/ASEAccessDeniedHandler.java b/src/main/java/com/codesdream/ase/component/permission/ASEAccessDeniedHandler.java index 67955f5..48405bb 100644 --- a/src/main/java/com/codesdream/ase/component/permission/ASEAccessDeniedHandler.java +++ b/src/main/java/com/codesdream/ase/component/permission/ASEAccessDeniedHandler.java @@ -1,6 +1,7 @@ package com.codesdream.ase.component.permission; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; import com.codesdream.ase.component.json.respond.UserLoginCheckerJSONRespond; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.AccessDeniedException; @@ -19,7 +20,7 @@ import java.io.IOException; public class ASEAccessDeniedHandler implements AccessDeniedHandler { @Resource - private JSONParameter jsonParameter; + private QuickJSONRespond quickJSONRespond; @Override public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) @@ -27,7 +28,7 @@ public class ASEAccessDeniedHandler implements AccessDeniedHandler { log.info("ASEAccessDeniedHandler Found!"); // 对无权限操作返回403 - response.getWriter().print(jsonParameter.getJSONStandardRespond403()); + response.getWriter().print(quickJSONRespond.getRespond403(null)); } diff --git a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationEntryPoint.java b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationEntryPoint.java index b367794..2fe9434 100644 --- a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationEntryPoint.java +++ b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationEntryPoint.java @@ -1,6 +1,7 @@ package com.codesdream.ase.component.permission; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.component.json.respond.UserLoginCheckerJSONRespond; import lombok.extern.slf4j.Slf4j; @@ -19,13 +20,13 @@ import java.io.IOException; @Component public class ASEAuthenticationEntryPoint implements AuthenticationEntryPoint { @Resource - private JSONParameter jsonParameter; + private QuickJSONRespond quickJSONRespond; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException { // 对匿名用户返回401 - response.getWriter().print(jsonParameter.getJSONStandardRespond401()); + response.getWriter().print(quickJSONRespond.getRespond401(null)); } } diff --git a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationFailureHandler.java b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationFailureHandler.java index 393d591..6516911 100644 --- a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationFailureHandler.java +++ b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationFailureHandler.java @@ -1,6 +1,7 @@ package com.codesdream.ase.component.permission; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; import com.codesdream.ase.component.json.respond.UserLoginCheckerJSONRespond; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.AuthenticationException; @@ -19,21 +20,15 @@ import java.io.IOException; public class ASEAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { @Resource - private JSONParameter jsonParameter; + private QuickJSONRespond quickJSONRespond; @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException { log.info("ASEAuthenticationFailureHandler Login Fail!"); - UserLoginCheckerJSONRespond respond = new UserLoginCheckerJSONRespond(); - respond.setUserExist(null); - respond.setUserBanned(null); - respond.setLoginStatus(false); - respond.setRespondInformation("Authentication Failed"); - - // 填充response对象 - response.getWriter().write(jsonParameter.getJSONStandardRespond200(respond)); + // 认证失败返回406 + response.getWriter().write(quickJSONRespond.getRespond406("Authentication Failure")); } } diff --git a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationSuccessHandler.java b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationSuccessHandler.java index 9abed5f..857e4b5 100644 --- a/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationSuccessHandler.java +++ b/src/main/java/com/codesdream/ase/component/permission/ASEAuthenticationSuccessHandler.java @@ -2,6 +2,7 @@ package com.codesdream.ase.component.permission; import com.codesdream.ase.component.auth.JSONTokenAuthenticationToken; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; import com.codesdream.ase.component.json.respond.UserLoginCheckerJSONRespond; import com.codesdream.ase.model.permission.User; @@ -27,7 +28,7 @@ import java.util.Optional; @Component public class ASEAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { @Resource - private JSONParameter jsonParameter; + private QuickJSONRespond quickJSONRespond; @Resource private IAuthService authService; @@ -40,7 +41,6 @@ public class ASEAuthenticationSuccessHandler extends SavedRequestAwareAuthentica UserLoginCheckerJSONRespond respond = new UserLoginCheckerJSONRespond(); respond.setUserExist(authentication.isAuthenticated()); respond.setLoginStatus(authentication.isAuthenticated()); - respond.setRespondInformation("Authentication Success"); // 获得 JSONTokenAuthenticationToken JSONTokenAuthenticationToken authenticationToken = (JSONTokenAuthenticationToken) authentication; @@ -55,7 +55,8 @@ public class ASEAuthenticationSuccessHandler extends SavedRequestAwareAuthentica } else respond.setToken(""); - response.getWriter().write(jsonParameter.getJSONStandardRespond200(respond)); + // 认证成功返回200 + response.getWriter().write(quickJSONRespond.getRespond200("Authentication Success", respond)); } } diff --git a/src/main/java/com/codesdream/ase/controller/LoginController.java b/src/main/java/com/codesdream/ase/controller/LoginController.java index e9c539c..eb319aa 100644 --- a/src/main/java/com/codesdream/ase/controller/LoginController.java +++ b/src/main/java/com/codesdream/ase/controller/LoginController.java @@ -2,6 +2,7 @@ package com.codesdream.ase.controller; import com.alibaba.fastjson.JSONObject; import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; import com.codesdream.ase.component.json.respond.JSONStandardFailedRespond; import com.codesdream.ase.component.json.respond.JSONBaseRespondObject; import com.codesdream.ase.component.permission.ASEUsernameEncoder; @@ -30,6 +31,9 @@ public class LoginController { @Resource private JSONParameter jsonParameter; + @Resource + private QuickJSONRespond quickJSONRespond; + @Resource private IUserService userService; @@ -61,11 +65,11 @@ public class LoginController { // 构造返回对象 UserLoginCheckerJSONRespond respond = new UserLoginCheckerJSONRespond(); respond.setUserExist(existStatus); - return jsonParameter.getJSONStandardRespond200(respond); + return quickJSONRespond.getRespond200(null, respond); } else { // 返回失败对象 - return jsonParameter.getJSONStandardRespond500("Error"); + return quickJSONRespond.getRespond400("CheckType Mismatch"); } } @@ -81,12 +85,12 @@ public class LoginController { if(loginChecker.getCheckType().equals("UIDGeneratorChecker")) { UserLoginCheckerJSONRespond respond = new UserLoginCheckerJSONRespond(); - respond.setRespondInformation(userService.getUsernameByStudentId(loginChecker.getUsername())); - return jsonParameter.getJSONStandardRespond200(respond); + respond.setUid(userService.getUsernameByStudentId(loginChecker.getUsername())); + return quickJSONRespond.getRespond200(null, respond); } else { // 返回失败对象 - return jsonParameter.getJSONStandardRespond500("Error"); + return quickJSONRespond.getRespond400("CheckType Mismatch"); } diff --git a/src/main/java/com/codesdream/ase/controller/RegisterController.java b/src/main/java/com/codesdream/ase/controller/RegisterController.java index 62ce6b3..acfd087 100644 --- a/src/main/java/com/codesdream/ase/controller/RegisterController.java +++ b/src/main/java/com/codesdream/ase/controller/RegisterController.java @@ -1,5 +1,8 @@ package com.codesdream.ase.controller; +import com.codesdream.ase.component.datamanager.JSONParameter; +import com.codesdream.ase.component.datamanager.QuickJSONRespond; +import com.codesdream.ase.component.json.request.UserRegisterChecker; import com.codesdream.ase.model.information.BaseStudentInfo; import com.codesdream.ase.model.permission.User; import com.codesdream.ase.service.BaseInformationService; @@ -8,10 +11,11 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.Map; +import java.util.Optional; @Controller public class RegisterController { @@ -21,61 +25,68 @@ public class RegisterController { @Resource private BaseInformationService baseInformationService; + @Resource + private JSONParameter jsonParameter; + + @Resource + private QuickJSONRespond quickJSONRespond; + @RequestMapping(value = "/register") String registerView(Model model){ return "register"; } // 处理注册表单 - @PostMapping(value = "/register") - String doRegister(Model model, HttpServletRequest request){ - Map parameterMap= request.getParameterMap(); + @PostMapping(value = "/register/do_register") + @ResponseBody + String doRegister(HttpServletRequest request){ - // 进行处理前的检查 - if(parameterMap.containsKey("student-id") - && parameterMap.containsKey("password") - && parameterMap.containsKey("retry-password") - && parameterMap.containsKey("user-question") - && parameterMap.containsKey("user-answer") - ) { - // 获得提交学号 - String student_id = parameterMap.get("student-id")[0].toString(); - // 获得密保问题 - String user_question = parameterMap.get("user-question")[0].toString(); - // 获得密保答案 - String user_answer = parameterMap.get("user-answer")[0].toString(); - - // 检查用户的基本信息是否录入系统 - if(!baseInformationService.checkStudentInfo(student_id)) - throw new RuntimeException("Student ID Not Found In Base Information Service"); - - // 查找对应的基本信息 - BaseStudentInfo studentInfo = baseInformationService.findStudentInfoByStudentId(student_id); - - // 根据基本信息生成对应用户 - User user = userService.getUserByStudentInfo(studentInfo); - - // 填充密保问题 - user.getUserAuth().setUserQuestion(user_question); - user.getUserAuth().setUserAnswer(user_answer); - user.getUserAuth().setMail(""); - - String password = parameterMap.get("password")[0].toString(); - String retry_password = parameterMap.get("retry-password")[0].toString(); - - if (password.equals(retry_password)) { - user.setPassword(password); - userService.save(user); - // 返回登录界面 - return "login"; - } - else{ - throw new RuntimeException("Retry Password Not Correct"); - } + Optional registerCheckerOptional = + jsonParameter.getJavaObjectByRequest(request, UserRegisterChecker.class); + // 检查JSON是否完整 + if(!registerCheckerOptional.isPresent()){ + return quickJSONRespond.getRespond400("Illegal JSON Format"); } - return "register"; + // 检查数据是否完整 + UserRegisterChecker registerChecker = registerCheckerOptional.get(); + if(registerChecker.getPassword() == null + || registerChecker.getStudentId() == null + || registerChecker.getUserAnswer() == null + || registerChecker.getUserQuestion() == null){ + return quickJSONRespond.getRespond400("Incomplete Data"); + } + + // 获得提交学号 + String student_id = registerChecker.getStudentId(); + // 获得密保问题 + String user_question = registerChecker.getUserQuestion(); + // 获得密保答案 + String user_answer = registerChecker.getUserAnswer(); + + // 检查用户的基本信息是否录入系统 + if(!baseInformationService.checkStudentInfo(student_id)) + return quickJSONRespond.getRespond500("StudentID Already Used"); + + // 查找对应的基本信息 + BaseStudentInfo studentInfo = baseInformationService.findStudentInfoByStudentId(student_id); + + // 根据基本信息生成对应用户 + User user = userService.getUserByStudentInfo(studentInfo); + + // 填充密保问题 + user.getUserAuth().setUserQuestion(user_question); + user.getUserAuth().setUserAnswer(user_answer); + user.getUserAuth().setMail(""); + + String password = registerChecker.getPassword(); + + user.setPassword(password); + userService.save(user); + + // 成功注册 + return quickJSONRespond.getRespond200("Register Success"); } }