Понимание requestMatchers () по безопасности пружин - PullRequest
0 голосов
/ 26 августа 2018

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

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Цель 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/**" не является частью какого-либо сопоставителя запроса.

0 голосов
/ 19 сентября 2018

API безопасности Spring: открытый финальный класс HttpSecurity.RequestMatcherConfigurer extends AbstractRequestMatcherRegistry

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

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