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

151 篇文章 3 订阅

转自:

 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); 
            }
        };
    }
}

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值