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端口转发方式解决跨域问题,传送门如下:
本文地址:https://blog.csdn.net/qq_19734597/article/details/107383413
上一篇: EJB-应用创造中