UiFilter.java

package io.featureprobe.api.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Slf4j
@Component
@Order(1)
public class UiFilter implements Filter {

    private final String passUri = "/static/css/**;/static/js/**;/static/media/**;/api/**;/internal/**;" +
            "/favicon.ico;/asset-manifest.json;/actuator/health;";

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request =(HttpServletRequest) servletRequest;
        if (!pass(request.getRequestURI())) {
            servletRequest.getRequestDispatcher("/index.html").forward(servletRequest, servletResponse);
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    private boolean pass(String uri) {
        AntPathMatcher matcher = new AntPathMatcher();
        for (String  pattern : passUri.split(";")) {
            if (matcher.match(pattern, uri)) {
                return true;
            }
        }
        return false;
    }

}