欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 后端解决跨域问题

程序员文章站 2022-03-11 09:00:10
之前项目中遇到过前端跨域问题,特此记录便于日后查阅。前端跨域问题解决方式有很多种,其中一种就是在页面请求的目标服务后台配置跨域代码,因为我们的项目是前后端分离的,后端统一要通过路由网关来进行请求转发,所以我只需要在路由网关服务配置跨域代码即可,代码如下:@SpringBootApplication@EnableEurekaClient@EnableFeignClients@EnableZuulProxypublic class ZuulApplication {public stat...

之前项目中遇到过前端跨域问题,特此记录便于日后查阅。

前端跨域问题解决方式有很多种,其中一种就是在页面请求的目标服务配置跨域代码,因为我们的项目是前后端分离的,后端统一要通过路由网关来进行请求转发,所以我只需要在路由网关服务配置跨域代码即可,代码如下:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableZuulProxy
public class ZuulApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuulApplication.class, args);
	}

	/**
	 * attention:简单跨域就是GET,HEAD和POST请求,但是POST请求的"Content-Type"只能是application/x-www-form-urlencoded, multipart/form-data 或 text/plain
	 * 反之,就是非简单跨域,此跨域有一个预检机制,说直白点,就是会发两次请求,一次OPTIONS请求,一次真正的请求
	 */
	@Bean
	public CorsFilter corsFilter() {
		final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		final CorsConfiguration config = new CorsConfiguration();
		config.setAllowCredentials(true); // 允许cookies跨域
		config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin
		config.addAllowedHeader("*");// #允许访问的头信息,*表示全部
		config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
		config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许
		config.addAllowedMethod("HEAD");
		config.addAllowedMethod("GET");// 允许Get的请求方法
		config.addAllowedMethod("PUT");
		config.addAllowedMethod("POST");
		config.addAllowedMethod("DELETE");
		config.addAllowedMethod("PATCH");
		source.registerCorsConfiguration("/**", config);
		return new CorsFilter(source);
	}
}

上述解决跨域问题的关键代码就是corsFilter方法,这样我们再次从前端请求网关服务,就不会再出现跨域问题了。

这种解决跨域问题的方式存在弊端,需要目标服务配合,推荐使用Nginx端口转发方式解决跨域问题,传送门如下:

Nginx 反向代理解决跨域问题

本文地址:https://blog.csdn.net/qq_19734597/article/details/107383413