Використання проксі - у цьому рішенні ми запустимо проксі-сервер, що коли запит проходить через проксі-сервер, він виглядає так, що він має таке саме походження. Якщо ви використовуєте nodeJS, ви можете використовувати cors -будь-де, щоб зробити проксі-сервер. https://www.npmjs.com/package/cors-anywhere .
Приклад : -
var host = process.env.HOST || '0.0.0.0';
var port = process.env.PORT || 8080;
var cors_proxy = require('cors-anywhere');
cors_proxy.createServer({
originWhitelist: [], // Allow all origins
requireHeader: ['origin', 'x-requested-with'],
removeHeaders: ['cookie', 'cookie2']
}).listen(port, host, function() {
console.log('Running CORS Anywhere on ' + host + ':' + port);
});
Сторона сервера - на стороні сервера нам потрібно включити запити перехресного походження. Спочатку ми отримаємо попередньо просвічені запити (ВАРІАНТИ), і нам потрібно дозволити запит, який є кодом статусу 200 (добре).
Попередньо заздалегідь запрошені спочатку надсилають заголовок запиту HTTP OPTIONS до ресурсу іншого домену, щоб визначити, чи безпечний для надсилання фактичний запит. Поточні запити попередньо відображаються таким чином, оскільки вони можуть мати значення для даних користувачів. Зокрема, запит попередньо перевіряється, якщо він використовує методи, відмінні від GET або POST. Крім того, якщо POST використовується для надсилання даних запиту із типом вмісту, відмінним від application / x-www-form-urlencoded, multipart / data-data, або text / plain, наприклад, якщо POST-запит надсилає на сервер корисну навантаження XML використовуючи application / xml або text / xml, тоді запит попередньо просвічується. Він встановлює власні заголовки у запиті (наприклад, у запиті використовується заголовок, наприклад X-PINGOTHER)
Якщо ви користуєтеся пружиною, просто додавання наступного коду вирішить проблему. Тут я відключив маркер csrf, який не має значення увімкнення / відключення відповідно до вашої вимоги.
@SpringBootApplication
public class SupplierServicesApplication {
public static void main(String[] args) {
SpringApplication.run(SupplierServicesApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
};
}
}
Якщо ви використовуєте джерело безпеки, використовуйте нижче код разом з вищевказаним кодом.
@Configuration
@EnableWebSecurity
public class SupplierSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll().antMatchers("/**").authenticated().and()
.httpBasic();
}
}