Как программно получить все URL-адреса ant matcher - PullRequest
1 голос
/ 17 апреля 2019

У меня есть базовое приложение Spring с различными конечными точками и страница входа в систему, определенная путем настройки HttpSecurity для WebSecurityConfigurerAdapter.

У меня есть служба, которая ищет все конечные точки в моем приложении и собирает некоторую основную информацию о них, которую я получил, автоматически подключив класс RequestMappingHandlerMapping и выполняя различные методы-обработчики.

Я хотел бы собрать аналогичную информацию для путей, которые определены адаптером WebSecurityCongigurer.

Например, в методе конфигурации, если у меня есть, скажем:

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().authorizeRequests()
                 .antMatchers(HttpMethod.POST, "/login").permitAll()

Из службы я хотел бы собрать информацию: "/login" и HttpMethod.POST. Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 17 апреля 2019

Мой пост не дает прямого ответа на вопрос, так как я не знаю, как это сделать. Тем не менее, есть обходной путь, и эта идея заслуживает шанса:

Я рекомендую вам иметь источник сопоставлений и установить antMatchers динамически. Это решение одновременно настраивает адаптер и оставляет источник сопоставлений доступным для дальнейшего использования (я рекомендую сохранять сами значения неизменяемыми).

List<MatcherMapping> mappings = ....
for (MatcherMapping mapping: mappings ) {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and().authorizeRequests()
              .antMatchers(mapping.getHttpMethod, mapping.getUrl).permitAll()
}

Класс MatcherMapping будет простым контейнером данных.

public final class MatcherMapping {

    private final HttpMethod httpMethod;
    private final String url;

    // constructor and getters
}

Независимо от того, получаете вы данные с помощью службы или получаете их напрямую, не имеет значения, наконец, ваше дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...