diff --git a/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java b/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java index 1be90a1..0f47814 100644 --- a/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java +++ b/src/main/java/im/zhaojun/zfile/filter/NotFoundFilter.java @@ -1 +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 +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.http.HttpStatus; 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; import java.util.Objects; /** * 对于因前端 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 HttpServletResponse httpServletResponse = (HttpServletResponse) response; if (Objects.equals(httpServletResponse.getStatus(), HttpStatus.NOT_FOUND.value())) { Response res = (Response) ReflectUtil.getFieldValue(response, "response"); if (res != null) { // 修改状态,默认情况 放过调用链执行后 response.setStatus 失败 res.setAppCommitted(false); res.setSuspended(false); httpServletResponse.setStatus(200); } } } } \ No newline at end of file