SpringBoot不同服务间配置跨域请求
跨域
浏览器同源策略的影响,不是同源的脚本不能操作其他源下面的对象。想要操作另一个源下的对象就需要跨域。 在同源策略的限制下,非同源的网站之间不能发送 AJAX 请求。
一:全局配置
package com.song.songvue.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Java编码定义
*/
@Configuration
public class MyWebConfig implements WebMvcConfigurer{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
/**
* 添加全局的配置 允许跨域请求
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/testCors/**")
.allowedHeaders("*")
.allowedMethods("*")
.maxAge(1800)
.allowedOrigins("http://localhost:8090");
}
}
二:方法配置
package com.song.songvue.test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* 测试CORS 跨域请求
*/
@RestController
@RequestMapping("/testCors")
public class TestCors {
/**
* @CrossOrigin
* value 表示支持的域
* maxAge 表示探测请求的有效期 1800秒
* allowedHeaders : * 表示所有的请求头都被允许
*/
@PostMapping("/getData")
@CrossOrigin(value = "http://localhost:8090", maxAge = 1800, allowedHeaders = "*")
public String addBook(String name) {
return "server: " + name;
}
@DeleteMapping("/{id}")
@CrossOrigin(value = "http://localhost:8090", maxAge = 1800, allowedHeaders = "*")
public String deleteBookById(@PathVariable String id) {
return id;
}
}
三、Spring Boot 配置 CORS四种方式
a:方法上配置跨域:可以在方法上添加 @CrossOrigin 注解
@CrossOrigin(origins = {"http://localhost:9000", "null"})
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String greetings() {
return "{\"project\":\"just a test\"}";
}
b:类上配置跨域:可以在类上添加 @CrossOrigin 注解
@CrossOrigin(origins = {"http://localhost:9000", "null"})
@RestController
@SpringBootApplication
public class SpringBootCorsTestApplication {
}
c:如果想添加全局配置,则需要添加一个配置类 :
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.maxAge(3600)
.allowCredentials(true);
}
}
d:通过添加 Filter 的方式,配置 CORS 规则,并手动指定对哪些接口有效。
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); config.addAllowedOrigin("http://localhost:9000");
config.addAllowedOrigin("null");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效
FilterRegistrationBean bean = newFilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
原理參考
https://www.cnblogs.com/yuansc/p/9076604.html