当前位置:网站首页>Solutions to cross domain problems
Solutions to cross domain problems
2022-07-07 12:20:00 【YXXYX】
introduction
Cross domain problems are usually encountered in projects with front end and back end separation , Cross domain arises because browsers are set up for security The same-origin policy , Only agreement (http/https)、 domain name (www.test.com)、 port (8080/8081…) When the three are the same, cross domain problems will not occur ;
This also explains why there are cross domain problems in projects with front-end and back-end separation , For example, we develop on the same server , Front-end url by :http://127.0.0.1:3000, And the back end url by :http://127.0.0.1:8080, Both ports are different. If you visit each other, cross domain problems will certainly occur ;
Pictured :

front end http://localhost:3000 Send a request back :http://localhost:8080/api/user/search/tags, But because the port number is different , So the request failed , The error message also shows cross domain policy blocking :has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Now let's share my solutions to cross domain problems ;
resolvent
Here are several ways to solve the above case ;
WebMvcConfig Configuration class cross domain configuration
Cross domain requests can be implemented through custom configuration classes , The specific configuration is as follows :
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// Set the allowed cross domain paths
registry.addMapping("/**")
// Set the domain name that allows cross domain requests
// When Credentials The certificate is true when ,Origin It can't be an asterisk , It needs to be specific ip Address ( If the interface doesn't have cookie,ip You don't need to be specific ip)
.allowedOrigins("http://localhost:3000")
// Whether to allow certificates No longer default on
.allowCredentials(true)
// Set allowed methods
.allowedMethods("*")
// Cross domain allow time
.maxAge(3600);
}
}
The front end requests from the back end :

You can see that the request succeeded , And cross domain allowed url The front-end domain name configured for :http://localhost:3000
annotation @CrossOrigin Achieve cross-domain
This method is much simpler than the above method , Directly on the back end Controller Add this annotation to the class , By default, all cross domain requests are allowed , But it's better to indicate the requested domain name :

This also enables cross domain access , It's simpler than configuration , But there are drawbacks , The last one says ;
The result is not to show , Same as before ;
GateWay Gateway configuration
The gateway configuration is generally a separate gateway module in the microservice project , Because all requests in microservices must be filtered through the gateway , So the first request is to go to the gateway , We can configure cross domain in the gateway service :
In the gateway module application.yml Configure cross domain in the configuration file :
# Cross domain configuration :
spring:
cloud:
gateway:
globalcors: # Global cross domain processing
add-to-simple-url-handler-mapping: true # solve options The request is blocked
corsConfigurations:
'[/**]': # Set which requests to block ,/** Means to intercept all requests
allowedOrigins: # Allow cross domain requests for which websites
- "http://localhost:3000"
allowedMethods: # Allowed cross domain ajax Request method of
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # Header information allowed to be carried in the request
allowCredentials: true # Is it allowed to carry cookie
maxAge: 360000 # The validity period of this cross domain detection
We can also customize the configuration file configuration :
/** * Cross domain unified configuration */
@Configuration
public class CorsConfig {
// To deal with cross domain
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// Allowed request header
config.addAllowedMethod("*");
// Allowed request sources ( Such as :http://localhost:8080)
config.addAllowedOrigin("http://localhost:3000");
// The allowed request method ==> GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
config.addAllowedHeader("*");
// URL mapping ( Such as : /admin/**)
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
Both of these methods can realize the cross domain configuration of the gateway ;
summary
In general, three methods to solve cross domain problems are introduced , So how to choose actually ?
@CrossOrigin annotation : This method is suitable for individual projects , More flexible , Implement a simple ; every last Controller Cross domain allowed by interface url All very clear. , however Controller It's troublesome when there are many interfaces ;
WebMvcConfig Configuration class : This method is suitable for individual projects , And if you feel in every Controller Add @CrossOrigin If annotation is troublesome , You can use this method ;
GateWay Gateway configuration : This method is suitable for microservice projects , And the two methods I share are still relatively recommended to use the first method , Directly in application.yml File configuration ;
One thing to note : If the gateway is configured with cross domain , then Don't Configure cross domain elsewhere , For example, in Controller add @CrossOrigin annotation , If you cross domains like this, it is equivalent to no configuration , It will fail ;
边栏推荐
- Apache installation problem: configure: error: APR not found Please read the documentation
- The function of adding @ before the path in C #
- 跨域问题解决方案
- 免备案服务器会影响网站排名和权重吗?
- 人大金仓受邀参加《航天七〇六“我与航天电脑有约”全国合作伙伴大会》
- Hi3516 full system type burning tutorial
- [filter tracking] comparison between EKF and UKF based on MATLAB extended Kalman filter [including Matlab source code 1933]
- 消息队列消息丢失和消息重复发送的处理策略
- [shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
- Summed up 200 Classic machine learning interview questions (with reference answers)
猜你喜欢

Unity中SmoothStep介绍和应用: 溶解特效优化

Camera calibration (1): basic principles of monocular camera calibration and Zhang Zhengyou calibration

百度数字人度晓晓在线回应网友喊话 应战上海高考英语作文

【纹理特征提取】基于matlab局部二值模式LBP图像纹理特征提取【含Matlab源码 1931期】

盘点JS判断空对象的几大方法

2022 年第八届“认证杯”中国高校风险管理与控制能力挑战赛
![110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]](/img/62/1ec8885aaa2d4dca0e764b73a1e2df.png)
110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]

Simple network configuration for equipment management

Unity 贴图自动匹配材质工具 贴图自动添加到材质球工具 材质球匹配贴图工具 Substance Painter制作的贴图自动匹配材质球工具

Fleet tutorial 19 introduction to verticaldivider separator component Foundation (tutorial includes source code)
随机推荐
College entrance examination composition, high-frequency mention of science and Technology
数据库系统原理与应用教程(011)—— 关系数据库
Completion report of communication software development and Application
【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码
Fleet tutorial 14 basic introduction to listtile (tutorial includes source code)
顶级域名有哪些?是如何分类的?
EPP+DIS学习之路(1)——Hello world!
Visual studio 2019 (localdb) \mssqllocaldb SQL Server 2014 database version is 852 and cannot be opened. This server supports version 782 and earlier
Hi3516 full system type burning tutorial
Upgrade from a tool to a solution, and the new site with praise points to new value
How to understand the clothing industry chain and supply chain
What are the top-level domain names? How is it classified?
Will the filing free server affect the ranking and weight of the website?
[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
zero-shot, one-shot和few-shot
What are the technical differences in source code anti disclosure
[data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
Superscalar processor design yaoyongbin Chapter 9 instruction execution excerpt
TypeScript 接口继承
<No. 8> 1816. 截断句子 (简单)