Понимание requestMatchers () о Spring-Security

Я изучаю какой-то код пружинной безопасности. Я хотел бы понять этот пример, который я нашел в Интернете. 1:

http.requestMatchers()
        .antMatchers("/management/**") // (1)
        .and()
        .authorizeRequests() // (2)
        .antMatchers("/management/health")
        .permitAll()
        .antMatchers("/management/info")
        .permitAll()
        .antMatchers("/management/**")
        .hasRole("ACTUATOR")
        .anyRequest().permitAll()
        .and()
        .httpBasic(); (3)

}

Я не могу понять эту конфигурацию, почему этот код:

http.requestMatchers()
        .antMatchers("/management/**")
        .and() 

Это до .authorizeRequests ()? (1)

Что это обозначает?

Вы можете объяснить этот пример?

2: Во втором случае в чем разница?

http.requestMatchers().antMatchers("/rest2/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll()
.antMatchers("/rest/v1/test/**").denyAll()
.and()
.requestMatchers().antMatchers("/rest/**")
.and()
.authorizeRequests()
.antMatchers("/rest/v1/test/hello").permitAll();

Каково влияние использования requestMatchers ()?

Если я отправлю запрос на «/ rest / v1 / test / hello2», я получу 401 Почему, если правило, отклоняющее запрос, не соответствует antMatchers («/ rest2 / **»)?

Не задавайте два разных вопроса в одном вопросе. Вам следует открыть два отдельных вопроса, потому что они не связаны между собой.

dur 26.08.2018 22:23

Однако ответ на ваш первый вопрос заключается в том, что вы неверно понимаете значение по умолчанию. В этом случае значение по умолчанию означает отсутствие настраиваемой конфигурации Spring Security, но у вас есть настраиваемая конфигурация Sprig Security.

dur 26.08.2018 22:26

Ваш второй вопрос, скорее всего, повторяется. См., Например: stackoverflow.com/questions/35890540/… (это касается antMatcher, но объяснение такое же для requestMatchers.

dur 26.08.2018 22:29

@dur, я разделил свой вопрос на два вопроса, см. stackoverflow.com/questions/52039148/…. Я до сих пор сомневаюсь, почему requestMatchers () использовался раньше других конфигураций, я почти вижу только authorizeRequests () в примерах.

javaTry 27.08.2018 14:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
8
4
9 538
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Spring API безопасности: общедоступный конечный класс HttpSecurity.RequestMatcherConfigurer расширяет AbstractRequestMatcherRegistry

Позволяет отображать HTTP-запросы, для которых будет использоваться этот HttpSecurity.

Ответ принят как подходящий

Цель requestMatchers() - указать, к каким запросам будет применяться конфигурация безопасности Spring.

Например, если у вас есть 2 конечные точки "/public" и "/private", и вы хотите, чтобы безопасность (в частности, защита csrf) применялась только к "/private", вы можете добавить следующую конфигурацию:

http
    .requestMatchers()
        .antMatchers("/private/**")
        .and()
    .csrf();

Затем, если вы отправите POST на "/private", вы получите ответ 403. Но если вы отправите POST на "/public", вы получите 200, потому что не было применено никакой защиты.

Это отличается от authorizeRequests, который указывает тип доступ, который требуется для этой конечной точки, в отличие от того, применяется ли безопасность вообще.

В примере 1, который вы упоминаете

http
    .requestMatchers()
        .antMatchers("/management/**")
        .and() 
        ...

конфигурация безопасности применяется только к "/management/**", поэтому, если вы сделаете запрос к "/foo", он не будет защищен.

В примере 2, который вы упомянули,

http
    .requestMatchers()
        .antMatchers("/rest2/**")
        .and()
    .authorizeRequests()
        .antMatchers("/rest/v1/test/hello").permitAll()
        .antMatchers("/rest/v1/test/**").denyAll()
        .and()
    .requestMatchers()
        .antMatchers("/rest/**")
        .and()
    .authorizeRequests()
        .antMatchers("/rest/v1/test/hello").permitAll();

Причина, по которой "/rest/v1/test/hello2" отвечает 401, заключается в том, что "/rest/**" находится в сопоставлении запросов, поэтому будет применяться ваше правило безопасности .antMatchers("/rest/v1/test/hello").permitAll(). Если бы вы отправили запрос к "/rest3/v1/test/hello2", он ответил бы 200, потому что "/rest3/**" не является частью какого-либо средства сопоставления запросов.

Другие вопросы по теме