Цель requestMatchers()
- указать, к каким запросам будет применена конфигурация безопасности пружины.
Например, если у вас 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/**"
находится взапросите совпадение, так что ваша безопасность рулe .antMatchers("/rest/v1/test/hello").permitAll()
будет применяться.
Если вы отправите запрос на "/rest3/v1/test/hello2"
, он ответит 200, потому что "/rest3/**"
не является частью какого-либо сопоставителя запроса.