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

[Dúvida] 403 Forbidden - Testando H2

Estou criando novamente a aplicação, só que estou utilizando H2. Fiz as mesmas configurações que foram feitas na aula, só que ao testar no Insomnia, retorna o erro 403. Não sei se o erro está na classe SecurityConfigurations ou na classe AutenticacaoController. Poderiam me ajudar, por favor?

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

package com.plano.saude.cadastro.infra.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.annotation.web.configurers.HeadersConfigurer;
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 static org.springframework.boot.autoconfigure.security.servlet.PathRequest.toH2Console;

@Configuration
@EnableWebSecurity
public class SecurityConfigurations {


    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .csrf(csrf -> csrf.ignoringRequestMatchers(toH2Console()).disable())
                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authorizeHttpRequests(req -> {
                    req.requestMatchers(toH2Console()).permitAll();
                })
                .headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
                .build();
    }

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

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



}
package com.plano.saude.cadastro.domain.usuario;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class AutenticacaoService implements UserDetailsService {

    @Autowired
    private UsuarioRepository usuarioRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return usuarioRepository.findByLogin(username);
    }
}
3 respostas

Posso estar errado mas talvez o endpoint que tem que chamar é /h2-console/login

Não, o endpoint não interfere. Tinha tomado outro erro antes, porque faltou eu ajustar a classe Service. Por enquanto não vai resolver.

solução!

Oi!

Faltou liberar a url de login:

 .authorizeHttpRequests(req -> {
    req.requestMatchers(toH2Console()).permitAll();
    req.requestMatchers("/login").permitAll();
})

E sua tabela de usuários no H2 está vazia. Precisa inserir o usuário.

Obs: no insomnia a senha deve ser enviada em texto aberto mesmo (ex: 12345678). O Spring que faz a covnersão para BCrypt ao checar com a senha no banco de dados.