Ciao!
grazie per la risposta.
ho provato così:
@Component
@Order(1)
public class AuthFilter extends OncePerRequestFilter {
  private Set<String> rotteEscluse = new HashSet<>(List.of("/utenti/login"));
  private AntPathMatcher pathMatcher = new AntPathMatcher();
  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    System.out.println("FILTER");
    filterChain.doFilter(request, response);
  }
  @Override
  protected boolean shouldNotFilter(HttpServletRequest request) {
    System.out.println("NO FILTER");
    return rotteEscluse.stream().anyMatch(p -> pathMatcher.match(p, request.getRequestURI()));
  }
}
solo che il comportamento che ha è strano.
se interrogo un qualsiasi endpoint mi escono sia FILTER che NO FILTER.
se interrogo "utenti/login" mi esce solo NO FILTER (quindi corretto).
in sostanza mi fa l'esclusione, ma non funziona per tutti quelli non da escludere.