当前位置:网站首页>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 ;
边栏推荐
- 112. Network security penetration test - [privilege promotion article 10] - [Windows 2003 lpk.ddl hijacking rights lifting & MSF local rights lifting]
- [full stack plan - programming language C] basic introductory knowledge
- 消息队列消息丢失和消息重复发送的处理策略
- idea 2021中文乱码
- Programming examples of stm32f1 and stm32subeide -315m super regenerative wireless remote control module drive
- Is it safe to open Huatai's account in kainiu in 2022?
- [data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
- 关于 Web Content-Security-Policy Directive 通过 meta 元素指定的一些测试用例
- 2022 年第八届“认证杯”中国高校风险管理与控制能力挑战赛
- SwiftUI 教程之如何在 2 秒内实现自动滚动功能
猜你喜欢

【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码

HCIA复习整理

Sign up now | oar hacker marathon phase III midsummer debut, waiting for you to challenge

Complete collection of common error handling in MySQL installation

Inverted index of ES underlying principle

Superscalar processor design yaoyongbin Chapter 8 instruction emission excerpt

powershell cs-UTF-16LE编码上线

关于 Web Content-Security-Policy Directive 通过 meta 元素指定的一些测试用例
![[extraction des caractéristiques de texture] extraction des caractéristiques de texture de l'image LBP basée sur le mode binaire local de Matlab [y compris le code source de Matlab 1931]](/img/65/bf1d0f82878a49041e8c2b3a84bc15.png)
[extraction des caractéristiques de texture] extraction des caractéristiques de texture de l'image LBP basée sur le mode binaire local de Matlab [y compris le code source de Matlab 1931]

2022 年第八届“认证杯”中国高校风险管理与控制能力挑战赛
随机推荐
Flet tutorial 17 basic introduction to card components (tutorial includes source code)
DOM parsing XML error: content is not allowed in Prolog
@What happens if bean and @component are used on the same class?
百度数字人度晓晓在线回应网友喊话 应战上海高考英语作文
从工具升级为解决方案,有赞的新站位指向新价值
[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
Epp+dis learning path (1) -- Hello world!
An error occurred when vscade tried to create a file in the target directory: access denied [resolved]
Completion report of communication software development and Application
【紋理特征提取】基於matlab局部二值模式LBP圖像紋理特征提取【含Matlab源碼 1931期】
Apache installation problem: configure: error: APR not found Please read the documentation
Rationaldmis2022 advanced programming macro program
Upgrade from a tool to a solution, and the new site with praise points to new value
【滤波跟踪】捷联惯导纯惯导解算matlab实现
Flet教程之 15 GridView 基础入门(教程含源码)
Sign up now | oar hacker marathon phase III midsummer debut, waiting for you to challenge
C#中在路径前加@的作用
When sink is consumed in mysql, the self incrementing primary key has been set in the database table. How to operate in Flink?
《通信软件开发与应用》课程结业报告
防红域名生成的3种方法介绍