springboot+vue前后端不分离时刷新404的处理

140 阅读1分钟

1、响应式

@Component
public class PreRoutFilter implements WebFilter

....


         @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        // 界面刷新路由404 处理
        String path = exchange.getRequest().getURI().getPath();
        List<String> menus = Arrays.asList("/",
                vue 的路由菜单 可以通过数据库查询缓存起来
        );
        if (menus.contains(path)) {
            return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().path("/index.html").build()).build());
        }

        return chain.filter(exchange);
    }
    

2、servlet

public class PreRoutFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;
        String uri = request.getRequestURI();
        List<String> menus = Arrays.asList(
                "/index",
                vue 的路由菜单 可以通过数据库查询缓存起来
        );
        if(menus.contains(uri)){
            request.getRequestDispatcher("/").forward(servletRequest, servletResponse);
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}


-- aplication 入口

@Bean
public FilterRegistrationBean filterRegistrationBean(){
    FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean(new PreRoutFilter());

    return filterRegistrationBean;
}

3、其他网站的写法

@Component
public class ErrorConfig implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
        registry.addErrorPages(error404Page);
    }
}