From 84f9354d4ec06612f7ba82b7929c7b3d29785f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BF=8A?= <873019219@qq.com> Date: Mon, 20 Sep 2021 16:17:16 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=AF=B9=E4=BA=8E=E5=9B=A0?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=20vue=20history=20=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8B,=20=E7=9B=B4=E6=8E=A5=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E8=B7=AF=E5=BE=84=E6=97=B6,=20=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E7=9A=84=20404=20=E5=93=8D=E5=BA=94=E7=A0=81,=20=E8=BD=AC?= =?UTF-8?q?=E5=8C=96=E4=B8=BA=20200=20=E5=93=8D=E5=BA=94=E7=A0=81.=20(404?= =?UTF-8?q?=20=E4=B8=8B=E4=BC=9A=E5=B0=86=E8=AF=B7=E6=B1=82=E8=BD=AC?= =?UTF-8?q?=E5=8F=91=E5=88=B0=E9=A6=96=E9=A1=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/im/zhaojun/zfile/config/WebMvcConfig.java | 2 ++ src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java | 1 + 2 files changed, 3 insertions(+) create mode 100644 src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java diff --git a/src/main/java/im/zhaojun/zfile/config/WebMvcConfig.java b/src/main/java/im/zhaojun/zfile/config/WebMvcConfig.java index 08aa2f0..38a7d04 100644 --- a/src/main/java/im/zhaojun/zfile/config/WebMvcConfig.java +++ b/src/main/java/im/zhaojun/zfile/config/WebMvcConfig.java @@ -42,8 +42,10 @@ public class WebMvcConfig implements WebMvcConfigurer { public WebServerFactoryCustomizer webServerFactoryCustomizer(){ return factory -> { ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html"); + ErrorPage error200Page = new ErrorPage(HttpStatus.OK, "/index.html"); Set errorPages = new HashSet<>(); errorPages.add(error404Page); + errorPages.add(error200Page); factory.setErrorPages(errorPages); }; } diff --git a/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java b/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java new file mode 100644 index 0000000..1be90a1 --- /dev/null +++ b/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java @@ -0,0 +1 @@ +package im.zhaojun.zfile.filter; import cn.hutool.core.util.ReflectUtil; import org.apache.catalina.connector.Response; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 对于因前端 vue history 路由模式下, 直接访问路径时, 出现的 404 响应码, 转化为 200 响应码. (404 下会将请求转发到首页) */ @Order(0) @WebFilter(value = "/*") @Component public class NotFoundFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 执行请求 chain.doFilter(request, response); // 拿到返回值, 如果是 404, 则转为 200 Response res = (Response) ReflectUtil.getFieldValue(response, "response"); if (res != null) { // 修改状态,默认情况 放过调用链执行后 response.setStatus 失败 res.setAppCommitted(false); res.setSuspended(false); HttpServletResponse httpServletResponse = (HttpServletResponse) response; httpServletResponse.setStatus(200); } } } \ No newline at end of file