Проблемы 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, потому что я удалил его, чтобы проверить, будет ли он работать.