Bladeren bron

处理 404, 500 等内部错误

reghao 2 jaren geleden
bovenliggende
commit
1ac90992b4

+ 7 - 13
manager/src/main/java/cn/reghao/devops/manager/account/controller/AccountAuthController.java

@@ -16,40 +16,34 @@ import javax.servlet.http.HttpServletRequest;
 @Slf4j
 @Api(tags = "登录页和首页")
 @Controller
-public class AccountAuthController implements ErrorController {
+public class AccountAuthController /*implements ErrorController*/ {
     @GetMapping("/login")
     public String toLogin(Model model) {
         model.addAttribute("isCaptcha", false);
         return "/login";
     }
 
-    @Override
+    /*@Override
     public String getErrorPath() {
         return "/error";
     }
 
-    /**
-     * 处理错误页面
-     *
-     * @param
-     * @return
-     * @date 2021-05-19 下午2:35
-     */
     @RequestMapping("/error")
-    @ResponseBody
     public String handleError(Model model, HttpServletRequest request) {
         Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
+        log.error("http status code: " + statusCode);
         if (statusCode == 404) {
-            return "接口不存在";
+            model.addAttribute("statusCode", statusCode);
+            model.addAttribute("msg", "页面去火星啦~");
+            return "/404";
         } else if (statusCode == 400) {
             return "参数错误";
         } else if (statusCode == 500) {
             return "服务器内部错误";
         }
-        log.error("http status code: " + statusCode);
 
         model.addAttribute("statusCode", statusCode);
         model.addAttribute("msg", "页面去火星啦~");
         return "/404";
-    }
+    }*/
 }

+ 2 - 2
manager/src/main/java/cn/reghao/devops/manager/account/security/ExceptionAuthenticationEntryPoint.java

@@ -21,8 +21,8 @@ public class ExceptionAuthenticationEntryPoint implements AuthenticationEntryPoi
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception)
             throws IOException, ServletException {
         String uri = request.getRequestURI();
-        log.error("请求 {} 接口认证失败...", uri);
-        String body = String.format("%s, %s need authenticate", exception.getMessage(), uri);
+        String errMsg = exception.getMessage();
+        log.error("请求 {} 接口认证失败: {}, 重定向到登录页面", uri, errMsg);
         response.sendRedirect("/login");
     }
 }

+ 47 - 0
manager/src/main/java/cn/reghao/devops/manager/config/web/ControllerErrorHandler.java

@@ -0,0 +1,47 @@
+package cn.reghao.devops.manager.config.web;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.web.servlet.error.ErrorController;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 处理 controller 返回的错误
+ *
+ * @author reghao
+ * @date 2020-06-19 13:34:19
+ */
+@Api(tags = "controller 错误处理接口")
+@Slf4j
+@Controller
+public class ControllerErrorHandler implements ErrorController {
+    @Override
+    public String getErrorPath() {
+        return "/error";
+    }
+
+    @RequestMapping("/error")
+    public String handleError(Model model, HttpServletRequest request) {
+        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
+        log.error("http status code: " + statusCode);
+        if (statusCode == 404) {
+            model.addAttribute("statusCode", statusCode);
+            model.addAttribute("msg", "页面去火星啦~");
+        } else if (statusCode == 400) {
+            model.addAttribute("statusCode", statusCode);
+            model.addAttribute("msg", "参数错误");
+        } else if (statusCode == 500) {
+            model.addAttribute("statusCode", statusCode);
+            model.addAttribute("msg", "服务器内部错误");
+        } else {
+            model.addAttribute("statusCode", statusCode);
+            model.addAttribute("msg", "未知错误");
+        }
+
+        return "/404";
+    }
+}

+ 0 - 42
manager/src/main/java/cn/reghao/devops/manager/config/web/FilterExceptionHandler.java

@@ -1,42 +0,0 @@
-package cn.reghao.devops.manager.config.web;
-
-import io.swagger.annotations.Api;
-import org.springframework.boot.autoconfigure.web.ErrorProperties;
-import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
-import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 处理 filter 中抛出的异常
- *
- * @author reghao
- * @date 2020-06-19 13:34:19
- */
-@Api(tags = "异常处理接口")
-@RestController
-public class FilterExceptionHandler extends BasicErrorController {
-    public FilterExceptionHandler() {
-        super(new DefaultErrorAttributes(), new ErrorProperties());
-    }
-
-    @Override
-    @RequestMapping(produces = {MediaType.APPLICATION_JSON_VALUE})
-    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
-        Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
-        HttpStatus status = getStatus(request);
-
-        Map<String,Object> map = new HashMap<>();
-        map.put("code",body.get("status"));
-        map.put("msg",body.get("message"));
-
-        return new ResponseEntity<>(map, HttpStatus.UNAUTHORIZED);
-    }
-}

+ 4 - 0
manager/src/main/resources/templates/404.html

@@ -25,6 +25,10 @@
 <div class="page-error" style="color: #009688">
     <div style="font-size: 120px" th:text="${statusCode}"></div>
     <div style="font-size: 24px" th:text="${msg}"></div>
+    <br>
+    <div>
+        <a th:href="@{/}" style="font-size: 24px; color: #ff0000">回到主页</a>
+    </div>
 </div>
 </body>
 </html>