1
resposta

Problema com o CORS Policy

Estou construindo uma API Rest e meu frontend está com problemas para consumir a API após implementação do Spring Security. Erro: Access to XMLHttpRequest from origin has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Minha classe de SecurityConfiguration

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

@Autowired
private SecurityFilter securityFilter;

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

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

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

@Bean
  public WebMvcConfigurer corsConfigurer() {
      return new WebMvcConfigurer() {
          @Override
          public void addCorsMappings(CorsRegistry registry) {
              registry.addMapping("/**")
                      .allowedMethods("*");
          }
      };
  }

}
1 resposta

Olá Henrique! Tudo bem?

Na parte da configuração do método addCorsMappings, você também indicar quais são as as origens, ou os domínios, que podem acessar sua aplicação. Você pode adicionar a url específica da aplicação frontend, ou pode deixar que qualquer domínio acesse a API, usando *

Seu método fica da seguinte forma:

public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("*")
        .allowedMethods("*");
}

Depois de fazer essa alteração, é só reiniciar a aplicação para conseguir acessar a API.

Espero ter ajudado e bons estudos! :)