Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida Sobre Access-Control-Allow-Origin e Spring Filter

Professor estou desenvolvendo um projeto onde um Front End através para um aplicativo no navegador que vai consumir está API. A API está utilizando o auth0 para autenticar usuarios, mas chegou uma hora que tive problemas em acessar urls da API que estão com req.anyRequest().authenticated(); e so consigo acessar as que tem req.requestMatchers("auth/login").permitAll() ; req.requestMatchers("auth/validate").permitAll(); req.requestMatchers("cadastro/usuario").permitAll(); req.requestMatchers("/auth/role").permitAll(); , Basicamente quando eu tento enviar uma requisição do Front end: const response = await fetch('http://localhost:8080/auth/role', { method: 'POST', headers: { 'Authorization': token } - Mas não obtenho nenhuma resposta do Back End quando url da API não tem o permitAll, e fica retornando este problema no Console do Navegador: Access to fetch at 'http://localhost:8080/auth/role' from origin 'http://127.0.0.1:8081' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.Entenda o erro dashboard.js:31 POST http://localhost:8080/auth/role net::ERR_FAILED Teria algum jeito de obter a resposta da API sem ter que dar um PermitAll no meu SecurityFilterChain? Eu estava pensando que como o problema é de Cors era só liberar o link do front no CorsOrigin no metodo da API, mas mesmo assim não liberou e tive que colocar este metodo dentro do FilterChain.

1 resposta
solução!

Basicamente adicionei

.cors(Customizer.withDefaults())

ao

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            return http.csrf(AbstractHttpConfigurer::disable)
                    .cors(Customizer.withDefaults())
                    .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                    .authorizeHttpRequests(req ->{
                        req.requestMatchers("auth/login").permitAll() ;
                        req.requestMatchers("auth/validate").permitAll();
                        req.requestMatchers("cadastro/usuario").permitAll();
                        req.requestMatchers("auth/reset").permitAll();
                        req.anyRequest().authenticated();
                    })
                    .addFilterBefore(securityFilter ,UsernamePasswordAuthenticationFilter.class)
                    .build();

e também

@Bean
UrlBasedCorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Como vi no final deste vídeo e https://www.youtube.com/watch?v=HRwlT_etr60 e também na DOC do Spring Security https://docs.spring.io/spring-security/reference/reactive/integrations/cors.html