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

Erro no CORS

Olá, tudo bem?

Estou com erro no cors, realizei toda a configuração do CORS no back mas ainda continuo com o erro.

Front: (vue js) está manual o authorization para testes.

onSubmit(event) {
      var token = VueCookies.get("token");
      console.log(token);
      var url = "http://localhost:8090/api/cadastrarCurso";

      axios
        .post(url, this.form, {
          headers: {
            "Content-Type": "application/json",
            "Authorization": "Bearer eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJBUEkgU3ByaW5nIEJvb3QgU2lzdGVtYSBBY2FkZW1pY28iLCJzdWIiOiIyIiwiaWF0IjoxNjQxMzM0OTQ2LCJleHAiOjE2NDEzNDM1ODZ9.8WZ_91zt2bSVq8fvUNvf94Eb_i4jG39HzMk35yV4VoE"
          },
        })
        .then(function (response) {
          console.log(response);
        })
        .catch(function (error) {
          console.log(error);
        });
      event.preventDefault();
      alert(JSON.stringify(this.form));
    },

Back:

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {

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

    }

}

Erro: como pode ver, acima da mensagem há a response que recebi ao realizar o login, gravei essa response em um cookie mas não consigo realizar o post pois dá erro de cors.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

8 respostas

Oi Francisco,

Precisa configurar o CORS para o Spring Security também, na classe SecurityConfigurations:

.and().cors()

Coloquei o and e o cors mas mesmo assim continua o erro, segue meu method

 @Override//configurações de autorização
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/auth").permitAll()
                .anyRequest().authenticated()
                .and().cors()
                .and().csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().addFilterBefore(new AutenticacaoViaTokenFilter(tokenService, usuarioRepository), UsernamePasswordAuthenticationFilter.class);
    }

Além disso aqui o link do github https://github.com/franciscocesar63/SistemaAcademico-Spring

Fiz um teste, quando eu uso o @CrossOrigin direto no controller funciona, mas isso não é o ideal, não é escalável.

@RestController
@RequestMapping("/auth")
@CrossOrigin(origins = "http://localhost:8080")
public class AutenticacaoController {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private TokenServiceUsuario tokenService;

    @PostMapping
    public ResponseEntity<?> autenticar(@RequestBody LoginForm login) {
        UsernamePasswordAuthenticationToken dadosLogin = login.converter();
        try {
            Authentication authentication = authenticationManager.authenticate(dadosLogin);

            String token = tokenService.gerarToken(authentication);
            System.out.println(token);

            return ResponseEntity.ok(new TokenDto(token, "Bearer"));

        } catch (AuthenticationException e) {
            return ResponseEntity.badRequest().build();
        }

    }

}

Está tudo certinho os códigos. Chegou a reiniciar o servidor pra testar novamente?

Sim!

Reiniciei fiz tudo, já revi todos os códigos, não sei o que tá faltando.

solução!

Cara, dei um Limpar e Construir, funcionou...

Só era isso.

Muito obrigado pela ajuda.

Boa!

Não fazia sentindo não estar funcionando :D

Bons estudos!

Obrigado!!