Проблемы Spring boot 3 CORS с Angular 14

У меня есть API Springboot 3, который находится в производстве. Всякий раз, когда я пытаюсь выполнить запрос API к одной из моих конечных точек, он выдает ошибку CORS:

Доступ к XMLHttpRequest в '(API_LINK)' из источника '(Hosted_Front-end)' заблокирован политикой CORS: запросы между источниками поддерживаются только для схем протоколов: http, данные, изолированное приложение, chrome-extension, chrome-untrusted, https, край.

Мой код Springboot 3 для обработки CORS выглядит следующим образом:

      public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins((Here are all my origins, correctly typed in))
        .allowedMethods("*")
        .allowedHeaders("*")
        .allowCredentials(true);
        }
}
      @Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {

    private final JwtAuthenticationFilter jwtAuthenticationFilter;
    private final AuthenticationProvider authenticationProvider;
    
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable().cors()
                .and()
                    .authorizeHttpRequests()
                    .requestMatchers("/api/v1/auth/**", "/api/v1/products/**")
                    .permitAll()
                    .anyRequest().authenticated()
                .and()
                    .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                    .authenticationProvider(authenticationProvider)
                    .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
    
        return httpSecurity.build();
    }

}

Я знаю, что это проблема CORS, потому что я могу использовать Insomnia для запроса всех маршрутов. Я попытался разрешить весь трафик, чтобы проверить, работает ли это, но это также не удалось и в ответ выдало мне ошибку CORS.

Это также может быть проблемой, связанной с внешним интерфейсом, поэтому вот мой Angular HttpInterceptor:

      @Injectable()
export class ApiInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const token = Cookies.get('token')

        if (req.url.startsWith('http')) return next.handle(req);
    
        let request = req;
    
        if (token) {
            request = req.clone({
            setHeaders: {
            Authorization: `Bearer ${token}`,
        },
        url: `${environment.apiUrl}${req.url}`,
        withCredentials: true,
        });
      } else {
          request = req.clone({
          url: `${environment.apiUrl}${req.url}`,
          withCredentials: true,
      });
    }
    
       return next.handle(request);

    }
}

Я много искал людей с похожей проблемой, но не нашел решения. Прямо сейчас я уверен, что .cors() в SecurityFilterChain не перезаписывает мой WebMvcConfigurer, потому что я удалил его, чтобы проверить, будет ли он работать.

0 ответов

Другие вопросы по тегам