天天看点

注解@CrossOrigin具有什么功能呢?

转自:

​​ 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("/**");
    }
}      
/**
 * 跨域配置
 */
@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); 
            }
        };
    }
}      

继续阅读