ソースを参照

update ControllerErrorHandler

reghao 4 ヶ月 前
コミット
e2b4e616aa

+ 8 - 4
web/src/main/java/cn/reghao/bnt/web/config/web/exception/ControllerErrorHandler.java

@@ -11,6 +11,8 @@ import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * 处理 controller 返回的错误, 替换默认的 BasicErrorController
+ * 将 /error 作为 Tomcat 的 ErrorPage, org.apache.catalina.core.StandardHostValve#status 方法中会调用 request.setAttribute 方法
+ * 设置错误信息, Attribute 的 key 来自 jakarta.servlet.RequestDispatcher
  *
  * @author reghao
  * @date 2020-06-19 13:34:19
@@ -22,15 +24,16 @@ public class ControllerErrorHandler implements ErrorController {
     @RequestMapping("/error")
     public String handleError(Model model, HttpServletRequest request) {
         int statusCode = 500;
-        Object object = request.getAttribute("javax.servlet.error.status_code");
+        Object object = request.getAttribute("jakarta.servlet.error.status_code");
         if (object != null) {
             statusCode = (int) object;
         }
 
-        String prevUrl = (String) request.getAttribute("javax.servlet.forward.request_uri");
         model.addAttribute("code", statusCode);
         if (statusCode == 404) {
-            model.addAttribute("msg", "页面去火星啦~");
+            model.addAttribute("msg", "页面不存在");
+        } else if (statusCode == 403) {
+            model.addAttribute("msg", "没有权限");
         } else if (statusCode == 400) {
             model.addAttribute("msg", "参数错误");
         } else if (statusCode == 500) {
@@ -39,8 +42,9 @@ public class ControllerErrorHandler implements ErrorController {
             model.addAttribute("msg", "未知错误");
         }
 
+        String prevUrl = (String) request.getAttribute("jakarta.servlet.forward.request_uri");
         String viewPath = "/classic/error";
-        if (prevUrl.startsWith("/bg")) {
+        if (prevUrl != null && prevUrl.startsWith("/bg")) {
             viewPath = "/admin/error";
         }
         return viewPath;