1
resposta

Configurar cors quando se usa gateway?

Queria saber como devo configurar o cors quando uso gateway. Neste momento tenho o seguinte codigo:

Gateway:

@Configuration
public class CorsConfiguration extends org.springframework.web.cors.CorsConfiguration {

    @Bean
    public CorsWebFilter corsFilter() {
        org.springframework.web.cors.CorsConfiguration corsConfiguration = new org.springframework.web.cors.CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedOrigin("http://localhost:3000");
        corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD"));
        corsConfiguration.addAllowedHeader("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(source);
    }
}
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
@Configuration
public class SecurityConfig {

    @Bean
    SecurityWebFilterChain filterChain(ServerHttpSecurity http, ServerProperties serverProperties,
            @Value("origins") String[] origins, @Value("permit-all") String[] permitAll) throws Exception {

        http.oauth2ResourceServer(resourceServer -> {
            resourceServer.jwt(jwt -> jwt.jwtAuthenticationConverter(new JwtAuthenticationConverterImpl()));
        });

        // State-less session (state in access token only)
        http.securityContextRepository(NoOpServerSecurityContextRepository.getInstance());

        // Disable CSRF because of state-less session-management
        http.csrf(csrf -> csrf.disable());

        // Return 401 (unauthorized) instead of 302 (redirect to login) when
        // authorization is missing or invalid
        http.exceptionHandling(exceptionHandling -> {
            exceptionHandling.accessDeniedHandler(accessDeniedHandler());
        });

        // If SSL enabled, disable http (https only)
        if (serverProperties.getSsl() != null && serverProperties.getSsl().isEnabled()) {
            http.redirectToHttps();
        }

        http.authorizeExchange(exchange -> exchange.pathMatchers(permitAll).permitAll().anyExchange().permitAll());

        return http.build();
    }
}

Outro micro-serviço:

@Configuration
public class WebConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE").allowedHeaders("*");
            }
        };
    }
}
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    
    @Autowired
    private SecurityFilter securityFilter;
    
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http.csrf(csrf -> csrf.disable())
                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authorizeHttpRequests(req -> {
                    req.anyRequest().permitAll();
                })
//	            .addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
                .build();
    }
}

E ao fazer uma requisição que retorna 200 OK recebo o seguinte erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguem me consegue ajudar?

1 resposta

Oii, Mauro! Tudo bem?

O erro que você está recebendo indica que a requisição está sendo bloqueada devido à política de CORS.

A configuração do CORS já está sendo feita no gateway e no micro-serviço. No gateway está funcionando certinho, porém no micro-serviço a configuração não está sendo aplicada.

Como sugestão, seria remover a configuração do CORS no outro micro-serviço, já que você já está configurando o CORS no gateway. Dessa forma, todas as requisições passariam pelo gateway e a configuração de CORS seria aplicada corretamente.

Além disso, verifique se o gateway está encaminhando corretamente as requisições para o outro micro-serviço. Certifique-se de que as rotas estão configuradas corretamente no gateway e que as requisições estão sendo redirecionadas de forma certa.

Espero que dê certo! Continue focando nos estudos, qualquer dúvida compartilhe aqui.

Bons estudos, Mauro!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software