转自:

​ http://www.java265.com/JavaFramework/Spring/202205/3454.html​

下文笔者讲述@CrossOrigin注解的功能简介说明,如下所示:

@CrossOrigin注解的功能:
禁止Ajax访问当前站点外的资源
如:禁止在另一个站点使用ajax访问你的站点

CORS简介

CORS:
全称"跨域资源共享"(Cross-origin resource sharing)

CORS:需要浏览器和服务器同时支持,才可以实现跨域请求
目前几乎所有浏览器都支持CORS,IE则不能低于IE10
CORS的整个过程都由浏览器自动完成,前端无需做任何设置,跟平时发送ajax请求并无差异
实现CORS的关键在于服务器,只要服务器实现CORS接口,就可以实现跨域通信

请求类型:
CORS分为简单请求和非简单请求(需预检请求)两类

跨域(CORS)支持

Spring Framework 4.2 GA为CORS提供了第一类支持
使您比通常的基于过滤器的解决方案更容易和更强大地配置它
所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin

使用方法简介说明

controller中配置CORS
我们可在@RequestMapping注解的上面添加一个@CrossOrigin注解
则可启用CORS(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法)

例:

@RestController
public class TestController {
@CrossOrigin
@PostMapping("/test/addRecord")
public CommonResult<Integer> add(@RequestBody TestController oneRecord) {
// ...
}

@GetMapping("/test/checkRecord")
public CommonResult<TestController> checkRecord(@RequestParam Integer recordId) {
// ...
}
}

 

我们还可以在CrossOrigin中添加两个参数
origins:允许可访问的域列表
maxAge:准备响应前的缓存持续的最大时间(以秒为单位)

例:

@CrossOrigin(origins = "http://127.0.0.1:8888/api/", maxAge = 3600)
@RestController
public class TestController {

@PostMapping("/test/oneRecord")
public CommonResult<Integer> add(@RequestBody TestRecord oneRecord) {
// ...
}

}

 


同时为两个controller设置CrossOrigin注解

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class TestController {

@CrossOrigin(origins = "http://127.0.0.1:8888/api/")
@PostMapping("/test/addRecord")
public CommonResult<Integer> add(@RequestBody TestRecord oneRecord) {
// ...
}

@GetMapping("/test/checkRecord")
public CommonResult<TestRecord> checkRecord(@RequestParam Integer id) {
// ...
}
}

 


全局配置CORS

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}

 

spring boot配置cors

/**
* 跨域配置
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {

@Bean
public WebMvcConfigurer corsConfigurer()
{
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").
allowedOrigins("http://www.java265.com"). //允许跨域的域名,可以用*表示允许任何域名使用
allowedMethods("*"). //允许任何方法(post、get等)
allowedHeaders("*"). //允许任何请求头
allowCredentials(true). //带上cookie信息
//maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L);
}
};
}
}