используя HttpSecurity.requestMatchers в классе ResourceServerConfiguration.configure весной oauth2 - PullRequest
0 голосов
/ 06 декабря 2018

Я изо всех сил пытался понять, как и когда использовать HttpSecurity.requestMatchers.Хотя я использую HttpSecurity.requestMatchers, но у меня есть вызовы authorizeRequests и antMatchers для определения правил безопасности.

Когда мне следует использовать

 http.requestMatchers()
              .antMatchers("/secure/**","/patients/**","/patient/**", "/hello/**")
              .and()
              .authorizeRequests().antMatchers("/secure/**","/books/**","/book/**", "/hello/**")
              .hasAnyRole("ADMIN","USER");

сверх

      http
      .authorizeRequests().antMatchers("/secure/**","/books/**","/hello/**", "/hello/**")
      .hasAnyRole("ADMIN","USER");

Сценарий помог бы мне понять сценарий использования HttpSecurity.requestMatchers

Я изучил requestMatchers , но все еще неясен для меня

1 Ответ

0 голосов
/ 06 декабря 2018

Если вам нужно настроить несколько HttpSecurity в вашем приложении, то вы обычно используете HttpSecurity.requestMatchers() или один из альтернативных (но похожих) вариантов конфигурации:

  • HttpSecurity.requestMatcher(RequestMatcher)
  • HttpSecurity.antMatcher(String)
  • HttpSecurity.mvcMatcher(String)
  • HttpSecurity.regexMatcher(String)

См. Ссылку в 6.10 Несколько HttpSecurity

Например, если ваше приложение имеет набор API-интерфейсов с корнем по базовому пути /api и другую категорию конечных точек для раздела администрирования приложения с корнем по базовому пути /admin, чем вы можете определить 2x WebSecurityConfigurerAdapter для вашего приложения как такового:

@EnableWebSecurity
public class SecurityConfig {

    @Configuration
    @Order(1)
    public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter {
        protected void configure(HttpSecurity http) throws Exception {
            http
                .requestMatchers()
                    .antMatchers("/api/**")
                    .and()
                .authorizeRequests()
                    .antMatchers("/api/endpoint1")
                        .hasRole("USER1");
        }
    }

    @Configuration
    public static class AdminWebSecurityConfig extends WebSecurityConfigurerAdapter {
        protected void configure(HttpSecurity http) throws Exception {
            http
                .requestMatchers()
                    .antMatchers("/admin/**")
                    .and()
                .authorizeRequests()
                    .antMatchers("/admin/endpoint1")
                        .hasRole("ADMIN1");

        }
    }
}

Однако, если вы предоставляете только 1x WebSecurityConfigurerAdapter, вам не нужно настраивать HttpSecurity.requestMatchers() (или любую из альтернатив), поскольку по умолчанию оно автоматическиHttpSecurity.requestMatcher(AnyRequestMatcher.INSTANCE).Таким образом, для этих случаев конфигурации этого достаточно:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers(...
    }
}

Надеюсь, это имеет смысл?

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