1
resposta

CORS + JWT

Bom dia devs! Estou com um problema que não estou conseguindo resolver! Tenho um projeto react com Java springBoot e tinha o codigo para habilitar o cors mas depois que eu fiz o curso de JWT, front end começou a bloquear, dando mensagem de cors. Alguem podéria me dar uma ajuda?

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("http://localhost:3000")
            .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "TRACE", "CONNECT");

    }
}

Depois do curso de JWT

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{

        return http.csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().authorizeRequests()
                .antMatchers(HttpMethod.POST,"/login").permitAll()
                .anyRequest().authenticated()

                .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
                .build();
    }
1 resposta

Olá Pedro! Bom dia!

Pelo que entendi, você está enfrentando um problema de CORS após implementar o JWT em seu projeto React com Spring Boot. O CORS é um mecanismo de segurança do navegador que impede que uma página da web faça requisições para um domínio diferente do seu.

No seu código de configuração do CORS, você está permitindo todas as origens ("allowedOrigins") acessarem sua API, desde que seja a origem "http://localhost:3000". Isso significa que apenas requisições vindas dessa origem serão permitidas.

No entanto, após implementar o JWT, você adicionou um filtro de segurança no seu código, que desabilita o CSRF (Cross-Site Request Forgery) e define a política de criação de sessão como STATELESS. Isso significa que o Spring Security não irá criar sessões para os usuários e não irá armazenar informações de autenticação no servidor.

Como o CORS é uma política de segurança do navegador, ele não permite que requisições com credenciais (como o token JWT) sejam feitas de uma origem diferente. Portanto, é necessário que você permita o cabeçalho "Authorization" nas requisições CORS.

Para resolver o problema, você pode adicionar o cabeçalho "Authorization" nas configurações do CORS. Ficaria assim:

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("http://localhost:3000")
        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "TRACE", "CONNECT")
        .allowedHeaders("Authorization"); // Adicione essa linha
}

Dessa forma, o navegador irá permitir que o cabeçalho "Authorization" seja enviado nas requisições CORS, permitindo a autenticação com o JWT.

Espero que isso resolva o seu problema! Se tiver mais alguma dúvida, é só me dizer. Espero ter ajudado e bons estudos!