Saltar al contenido

Spring Boot /h2-console lanza 403 con Spring Security 1.5.2

Te doy la bienvenida a nuestro sitio web, en este sitio encontrarás la resolución de lo que estás buscando.

Solución:

Spring security bloquea la ruta /h2-console (o la ruta que configuró en su application.yaml) para la base de datos H2.

Para acceder a la consola H2, simplemente agregue el siguiente código a su WebSecurityConfigurerAdapter.

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/h2-console/**").permitAll();

        http.csrf().disable();
        http.headers().frameOptions().disable();
    

No utilice esta configuración en un entorno de producción. =)

Dado que H2 tiene su propio proveedor de autenticación, puede omitir Spring Security para la ruta de la consola h2 por completo de la misma manera que lo hace para su static contenido.

Para hacer eso, en su configuración de seguridad de Spring, debe anular el método de configuración que toma una instancia de org.springframework.security.config.annotation.web.builders.WebSecurity como un parámetro en lugar del que toma una instancia de org.springframework.security.config.annotation.web.builders.HttpSecurity

    @Override
    public void configure(WebSecurity web) throws Exception 
        web
            .ignoring()
            .antMatchers("/h2-console/**");
    

Si está utilizando h2 en un entorno de producción, asegúrese de configurar las medidas de seguridad adecuadas (como establecer una ruta no obvia, una buena contraseña, una lista blanca de ip) para su consola h2.

@Configuration
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@ConditionalOnBean(ObjectPostProcessor.class)
@ConditionalOnProperty(prefix = "security.basic", name = "enabled", matchIfMissing = true)
static class H2ConsoleSecurityConfiguration 

Como puede ver el código fuente en el arranque de primavera, si habilita el básico, el arranque de primavera cargará la configuración de seguridad de primavera H2ConsoleSecurityConfigurer Con orden SecurityProperties.BASIC_AUTH_ORDER - 10, y la autenticación se basa en su configuración de seguridad. Esta es la configuración de seguridad predeterminada:

public void configure(HttpSecurity http) throws Exception 
            String path = this.console.getPath();
            String antPattern = path.endsWith("/")?path + "**":path + "/**";
            HttpSecurity h2Console = http.antMatcher(antPattern);
            h2Console.csrf().disable();
            h2Console.httpBasic();
            h2Console.headers().frameOptions().sameOrigin();
            // the default role is `USER` and `management.security.roles`
            String[] roles = (String[])this.security.getUser().getRole().toArray(new String[0]);
           // this value is base `security.basic.authorize-mode`, `role`, 'authenticated' and `none`
            SecurityAuthorizeMode mode = this.security.getBasic().getAuthorizeMode();
            if(mode != null && mode != SecurityAuthorizeMode.ROLE) 
                if(mode == SecurityAuthorizeMode.AUTHENTICATED) 
                    ((AuthorizedUrl)http.authorizeRequests().anyRequest()).authenticated();
                
             else 
                ((AuthorizedUrl)http.authorizeRequests().anyRequest()).hasAnyRole(roles);
            

        

y también puede crear una nueva configuración para anular la predeterminada.

@Configuration
// before the default configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 11)
class CustomH2ConsoleSecurityConfigurer extends WebSecurityConfigurerAdapter 

        @Autowired
        private H2ConsoleProperties console;

        @Override
        public void configure(HttpSecurity http) throws Exception 
            String path = this.console.getPath();
            String antPattern = (path.endsWith("/") ? path + "**" : path + "/**");
            HttpSecurity h2Console = http.antMatcher(antPattern);
            h2Console.csrf().disable();
            h2Console.httpBasic();
            h2Console.headers().frameOptions().sameOrigin();
            // config as you like
            http.authorizeRequests().anyRequest().permitAll();
        

    

Te mostramos las reseñas y valoraciones de los usuarios

Acuérdate de que tienes el privilegio añadir una valoración correcta .

¡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 *