在spring boot中使用@WebFilter配置filter(包括排除URL)

时间:2025-05-15 17:19:45
@WebFilter(urlPatterns = "/*")
@Order(value = 1)
public class TestFilter implements Filter {

    private static final Set<String> ALLOWED_PATHS = (new HashSet<>(
            ("/main/excludefilter", "/login", "/logout", "/register")));
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        ("init-----------filter");
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        String path = ().substring(().length()).replaceAll("[/]+$", "");
        boolean allowedPath = ALLOWED_PATHS.contains(path);

        if (allowedPath) {
            ("这里是不需要处理的url进入的方法");
            (req, res);
        }
        else {
            ("这里是需要处理的url进入的方法");
        }
    }

    @Override
    public void destroy() {
        ("destroy----------filter");
    }
}

@Order中的value越小,优先级越高。

ALLOWED_PATHS
这个是一个集合,存放的是需要排出的URL,用来判断是否是需要排除的URL。

关于为什么SpringBoot中使用了@WebFilter但是过滤器却没有生效:一定要加上@Configuration注解,@Service其实也可以,其他类似。