Saltar al contenido

¿Cuándo usar antMatcher () de Spring Security?

Solución:

Necesitas antMatcher para múltiples HttpSecurity, consulte Referencia de seguridad de Spring:

5.7 HttpSecurity múltiple

Podemos configurar múltiples instancias de HttpSecurity al igual que podemos tener múltiples <http> bloques. La clave es extender el WebSecurityConfigurationAdapter varias veces. Por ejemplo, el siguiente es un ejemplo de tener una configuración diferente para las URL que comienzan con /api/.

@EnableWebSecurity
public class MultiHttpSecurityConfig {
  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) { 1
      auth
          .inMemoryAuthentication()
              .withUser("user").password("password").roles("USER").and()
              .withUser("admin").password("password").roles("USER", "ADMIN");
  }

  @Configuration
  @Order(1)                                                        2
  public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
      protected void configure(HttpSecurity http) throws Exception {
          http
              .antMatcher("/api/**")                               3
              .authorizeRequests()
                  .anyRequest().hasRole("ADMIN")
                  .and()
              .httpBasic();
      }
  }    

  @Configuration                                                   4
  public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .authorizeRequests()
                  .anyRequest().authenticated()
                  .and()
              .formLogin();
      }
  }
}

1 Configure la autenticación como de costumbre

2 Cree una instancia de WebSecurityConfigurerAdapter eso contiene @Order para especificar cual WebSecurityConfigurerAdapter debe considerarse primero.

3 El http.antMatcher afirma que esto HttpSecurity solo se aplicará a las URL que comiencen con /api/

4 Cree otra instancia de WebSecurityConfigurerAdapter. Si la URL no comienza con /api/ se utilizará esta configuración. Esta configuración se considera después ApiWebSecurityConfigurationAdapter ya que tiene un @Order valor después 1 (no @Order predeterminado para durar).

En tu caso no necesitas antMatcher, porque solo tiene una configuración. Tu código modificado:

http
    .authorizeRequests()
        .antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
        .antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
        .somethingElse() // for /high_level_url_A/**
        .antMatchers("/high_level_url_A/**").authenticated()
        .antMatchers("/high_level_url_B/sub_level_1").permitAll()
        .antMatchers("/high_level_url_B/sub_level_2").hasRole('USER3')
        .somethingElse() // for /high_level_url_B/**
        .antMatchers("/high_level_url_B/**").authenticated()
        .anyRequest().permitAll()

Estoy actualizando mi respuesta …

antMatcher() es un método de HttpSecurity, no tiene nada que ver con authorizeRequests(). Básicamente, http.antMatcher() le dice a Spring que solo configure HttpSecurity si la ruta coincide con este patrón.

los authorizeRequests().antMatchers() luego se utiliza para aplicar la autorización a una o más rutas que especifique en antMatchers(). Tal como permitAll() o hasRole('USER3'). Estos solo se aplican si el primero http.antMatcher() está emparejado.

Básicamente http.antMatcher() le dice a Spring que solo configure HttpSecurity si la ruta coincide con este patrón.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *