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

Dúvida front sendo bloqueado pelo CORS.

back https://github.com/MacedoSFI/equipes-de-projeto front https://github.com/MacedoSFI/squads Olá tudo bem? Estou tentando acessar esta API que eu fiz no curso através de uma aplicação que eu também fiz a partir do curso de "Iniciando com o Angular", está dando erro abaixo:

Access to XMLHttpRequest at 'http://localhost:8080/projetos' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
zone-evergreen.js:2845 GET http://localhost:8080/projetos net::ERR_FAILED.
...
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "http://localhost:8080/projetos", ok: false, …}

backend usando profile de dev com permitAll para a url projetos e no frontend funcionou certinho a pai de mock conforme apresentado no curso. Ahh e também o acesso pelo Postman ocorreu sem problemas.

Se a resposta para minha pergunta for que faltou realizar a autenticação, reforço que está em profile de dev com todos acessos liberados:

@Override
    public void configure(HttpSecurity http) throws Exception {

        http
            .authorizeRequests()
            .antMatchers("/index").permitAll()
            .antMatchers("/projetos").permitAll()
            .antMatchers("/ok").permitAll()
            .antMatchers("/auth").permitAll()
            .antMatchers(HttpMethod.DELETE, "/projetos/*").hasRole("MODERADOR")
            .anyRequest().authenticated()
            .and()
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)// quando autenticar não é para criar sessão
            .and().addFilterBefore(new AutenticacaoViaTokenFilter(tokenService, userRepository), UsernamePasswordAuthenticationFilter.class);

    }
3 respostas

Oi Ian,

Você precisa criar uma classe de configuração para o CORS.

Tem um exemplo aqui: https://cursos.alura.com.br/forum/topico-cors-113963

solução!

Obrigado Rodrigo, vou dar uma olhada.

solução: muito grato!!!!!!!

package net.felipemacedo.equipes.config.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
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.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebSecurity
@Profile("dev")
public class DevSecurityConfigurations extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {

    //configura autenticação 
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/projetos").permitAll()
            .antMatchers("/auth").permitAll()
            .and().cors()
            .and().csrf().disable();    
    }

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

    /*
     * public static void main(String[] args) {
     * 
     * System.out.println(new BCryptPasswordEncoder().encode("1234")); }
     */


}