Sử dụng Proxy - Trong giải pháp này, chúng tôi sẽ chạy proxy sao cho khi yêu cầu đi qua proxy, nó sẽ xuất hiện giống như một nguồn gốc giống nhau. Nếu bạn đang sử dụng nodeJS, bạn có thể sử dụng cors-bất cứ nơi nào để thực hiện công cụ proxy. https://www.npmjs.com/package/cors-anywhere .
Ví dụ : -
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);
});
Phía máy chủ - Về phía máy chủ, chúng tôi cần kích hoạt các yêu cầu xuất xứ chéo. Đầu tiên, chúng tôi sẽ nhận được các yêu cầu Preflighted (TÙY CHỌN) và chúng tôi cần cho phép yêu cầu đó là mã trạng thái 200 (ok).
Các yêu cầu được chiếu trước trước tiên gửi tiêu đề yêu cầu HTTP TÙY CHỌN đến tài nguyên trên tên miền khác, để xác định xem yêu cầu thực tế có an toàn để gửi hay không. Các yêu cầu trên nhiều trang web được chiếu trước như thế này vì chúng có thể có liên quan đến dữ liệu người dùng. Cụ thể, một yêu cầu được chiếu trước nếu nó sử dụng các phương thức khác ngoài GET hoặc POST. Ngoài ra, nếu POST được sử dụng để gửi dữ liệu yêu cầu với Loại nội dung không phải là application / x-www-form-urlencoding, Multipart / form-data hoặc text / plain, ví dụ: nếu yêu cầu POST gửi tải trọng XML đến máy chủ sử dụng application / xml hoặc text / xml, sau đó yêu cầu được chiếu trước. Nó đặt các tiêu đề tùy chỉnh trong yêu cầu (ví dụ: yêu cầu sử dụng một tiêu đề như X-PINGOTHER)
Nếu bạn đang sử dụng lò xo chỉ cần thêm mã dưới đây sẽ giải quyết vấn đề. Ở đây tôi đã vô hiệu hóa mã thông báo csrf không quan trọng bật / tắt theo yêu cầu của bạn.
@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("*");
}
};
}
}
Nếu bạn đang sử dụng bảo mật mùa xuân, hãy sử dụng mã bên dưới cùng với mã ở trên.
@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();
}
}