spring boot 使用@WebFilter 后 @ControllerAdvice拦截不了filter的异常 ,及WebFilter匹配路径问题。

384 阅读1分钟
@WebFilter
public class YourFilter extends GenericFilterBean {
    
    // 使用此类
    @Autowired
    private HandlerExceptionResolver handlerExceptionResolver;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        try {

            filterChain.doFilter(request, response);

        } catch (Exception e) {
            // 交给全局异常处理后
            handlerExceptionResolver.resolveException(request, response, null, e);
        }
    }

}

如果需要指定匹配路径,例如:

//@Component 切记不需要加上这个 不然路径匹配会不生效,就是会全部匹配。
@WebFilter(urlPatterns = {"/oauth/Login"})

并且需要在启动类加上

@ServletComponentScan
@SpringBootApplication
public class AdminApplicationManager extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(AdminApplicationManager.class, args);
    }
}