URL пути соответствия в Java (Spring) - PullRequest
0 голосов
/ 09 декабря 2018

в нашем приложении мы создаем фильтры запросов, которые не должны срабатывать для некоторых URL.Мы хотим иметь возможность исключать URL-адреса, такие как шаблоны URL "Весна-ведьма", например:

// register filter in bean
FilterRegistrationBean filterBeanRegistration = new FilterRegistrationBean();
filterBeanRegistration.setFilter(myFilter());
filterBeanRegistration.addInitParameter("excluded", "*/foo/**, */bar/**");
...

, а новый фильтр не отображает URL-адреса, такие как domain:8080/aaa/foo/xxxx, domain:8080/bbb/bar/xxxx.

Можете ли выподскажите, как это сделать с весенними уроками или другим простым способом?Спасибо за совет.

РЕДАКТИРОВАТЬ: Существует метод FilterBeanRegistration#addUrlPatterns(String... urls), где я могу указать URL-адреса, но нет никакого формата, который сообщает, какой URL-адрес должен попадать.Для наших целей лучше исключить некоторые URL.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать org.springframework.web.filter.OncePerRequestFilter.Он выполняется один раз при каждом входящем запросе.Вы можете переопределить метод shouldNotFilter, чтобы исключить URL-адреса, для которых не нужен фильтр.Пример кода:

public class MyFilter extends OncePerRequestFilter {

  private static final String[] excludedEndpoints = new String[] {"*/foo/**, */bar/**"};

  @Override
  protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
    return Arrays.stream(excludedEndpoints)
        .anyMatch(e -> new AntPathMatcher().match(e, request.getServletPath()));
  }

  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
      FilterChain filterChain) throws ServletException, IOException {
    // Filtering logic goes here. call below line on successful authentication.
    filterChain.doFilter(request, response);
  }
}
...