Я изучаю какой-то код пружинной безопасности. Я хотел бы понять этот пример, который я нашел в Интернете. 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 / **»)?
Однако ответ на ваш первый вопрос заключается в том, что вы неверно понимаете значение по умолчанию. В этом случае значение по умолчанию означает отсутствие настраиваемой конфигурации Spring Security, но у вас есть настраиваемая конфигурация Sprig Security.
Ваш второй вопрос, скорее всего, повторяется. См., Например: stackoverflow.com/questions/35890540/… (это касается antMatcher, но объяснение такое же для requestMatchers.
@dur, я разделил свой вопрос на два вопроса, см. stackoverflow.com/questions/52039148/…. Я до сих пор сомневаюсь, почему requestMatchers () использовался раньше других конфигураций, я почти вижу только authorizeRequests () в примерах.




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/**" не является частью какого-либо средства сопоставления запросов.
Не задавайте два разных вопроса в одном вопросе. Вам следует открыть два отдельных вопроса, потому что они не связаны между собой.