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 .