Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Acesso h2 console

Profesosr, tudo bom?

Eu consegui implementar a solução do login, porém quando tento acessar o banco pelo h2 (banco que escolhi) ele apresenta o seguinte erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O senhor poderia me ajudar? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

7 respostas

Olá, poderia postar o seu código da classe SecurityConfigurations, para que eu possa analisar?

Mas já adianto, que possivelmente você possa ter se esquecido de adicionar o h2-console na lista de urls liberadas para acesso.

no metodo onde você autoriza acesso a sua api sem estar autentica é necessario que tenha a url "/h2-console" permitida

 httpSecurity.authorizeRequests()
                .antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
                .antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated();
        httpSecurity.addFilter(new JWTAutheticationFilter(authenticationManager(), jwtUtil));
        httpSecurity.addFilter(new JWTAuthorizationFilter(authenticationManager(), jwtUtil, userDetailsService));
        httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

Olá tudo bom?

Segue meu código da classe, obrigado;

package itau.canais.api.modules.produto.config;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration @EnableWebSecurity public class SecurityConfigurations {

@Autowired
private SecurityFilter securityFilter;

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
     return http
             .csrf().disable()
             .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
             .and().authorizeHttpRequests()
             .requestMatchers(HttpMethod.POST, "/login").permitAll()
             .anyRequest().authenticated()
             .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
             .build();
}

@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception{
    return configuration.getAuthenticationManager();
}

@Bean
public PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

}

Tente o seguinte

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
     return http
             .csrf().disable()
             .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
             .and().authorizeHttpRequests()
             .requestMatchers(HttpMethod.POST, "/login").permitAll()
             .antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
             .anyRequest().authenticated()
             .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
             .build();
}

Adicionei a seguinte linha

.antMatchers(HttpMethod.GET, "/h2-console/**").permitAll()

no seu metodo securityFilterChain, com essa linha estou dizendo que é permitido a chamada da url h2-console com o metodo GET sem estar autenticado na aplicação.

Pode testar e me informar se funcionou?

Olá eu fiz a troca pelo .requestMatchers(HttpMethod.GET, "/h2-console/**").permitAll(), visto que o spring 3.0.0 não aceita mais o antMtchers.

Mas não surtiu efeito.

Gerei o token, após o login, e inseri porém ainda apresenta o erro 403

Marco desculpe a sumida, no projeto que estou montando, resolvi dar um tempo com segurança e ir para a simulação de front, voltei ontem com a segurança.

Tentei fazer o que sugeriu e continua dando o 403, tanto que não acesso o h2-console no navegador, como também a pagina index de login. Meu código

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
    return http
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeHttpRequests()
            .requestMatchers(HttpMethod.POST, "/login").permitAll()
            .requestMatchers(HttpMethod.GET, "/h2-console/**").permitAll()
            .anyRequest().authenticated()
            .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
                }
solução!

Oi Lúcio!

Para liberar o h2 você precisa de duas configurações:

.requestMatchers("/h2-console/**").permitAll()
.and().headers().frameOptions().sameOrigin()

Bons estudos!

Professor a minha classe tem que ficar assim?

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
    return http
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeHttpRequests()
            .requestMatchers("/**", "/login", "/h2-console/**").permitAll()
            .and().headers().frameOptions().sameOrigin()
            .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
}