Alguém pode me ajudar com isso, está acontencendo seguinte erro na minh app angular:
Access to XMLHttpRequest at 'http://localhost:8080/autenticacao/login' from origin 'http://localhost:4200' 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.
a API que estou consumindo é minha tbm:
@EnableWebSecurity
@Configuration
public class SecurityConfiguration {
@Autowired
private SecurityFilter securityFilter;
@Bean
protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http.csrf(csrf -> csrf.disable())
.cors(cors -> cors.disable())
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(req -> {
req.requestMatchers(HttpMethod.POST, "/autenticacao/login").permitAll();
req.requestMatchers(HttpMethod.GET, "/swagger-ui/**").permitAll();
req.requestMatchers(HttpMethod.GET, "/actuator/**").permitAll();
req.requestMatchers(HttpMethod.GET, "/swagger-resources/**").permitAll();
req.requestMatchers(HttpMethod.GET, "/v3/api-docs/**").permitAll();
req.requestMatchers(HttpMethod.GET, "/webjars/**").permitAll();
req.anyRequest().authenticated();
})
.addFilterBefore(this.securityFilter, UsernamePasswordAuthenticationFilter.class)
.build();
}
@Bean
protected AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception{
return configuration.getAuthenticationManager();
}
@Bean
protected PasswordEncoder passwordEncoder() throws Exception {
return new BCryptPasswordEncoder();
}
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("Thais123"));
}
}
@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*");
}
}
@CrossOrigin
@Tag(name = "Autenticação", description = "Método para se autenticar na API")
@RestController
@RequestMapping("/autenticacao")
public class AutenticacaoController {
private static Logger log = Logger.getLogger(AutenticacaoController.class);
@Autowired
private AuthenticationManager manager;
@Autowired
private TokenService tokenService;
@PostMapping("login")
public ResponseEntity<DadosTokenJWT> login(@RequestBody @Valid DadosLogin login) {
log.info("Realizando o login: "+login.username());
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(login.username(), login.password());
Authentication authenticate = manager.authenticate(authenticationToken);
String token = this.tokenService.gerarToken((Usuario) authenticate.getPrincipal());
log.info("HTTP ok");
return ResponseEntity.ok(new DadosTokenJWT(token, "Bearer"));
}
}