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