当前位置:   article > 正文

SpringBoot解决跨域_cors origins 所有

cors origins 所有

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、什么是跨域?

二、java解决CORS跨域请求的方式

a、返回新的CorsFilter(全局跨域)

 b、重写WebMvcConfigurer(全局跨域)

c、使用注解 (局部跨域)

d、手动设置响应头(局部跨域)

前言

第一次尝试

一、什么是跨域?

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
在这里插入图片描述

二、java解决CORS跨域请求的方式

  1. 返回新的CorsFilter
  2. 重写 WebMvcConfigurer
  3. 使用注解 @CrossOrigin
  4. 手动设置响应头 (HttpServletResponse)
  5. 自定web filter 实现跨域

 注意

CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支持,对应springBoot 1.3版本以上。
上面前两种方式属于全局 CORS 配置,后两种属于局部 CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则,所以可以通过 @CrossOrigin 注解来进行细粒度更高的跨域资源控制。
其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域。


a、返回新的CorsFilter(全局跨域)

  1. @Configuration
  2. public class GlobalCorsConfig {
  3. @Bean
  4. public CorsFilter corsFilter() {
  5. //1. 添加 CORS配置信息
  6. CorsConfiguration config = new CorsConfiguration();
  7. //放行哪些原始域
  8. config.addAllowedOrigin("*");
  9. //是否发送 Cookie
  10. config.setAllowCredentials(true);
  11. //放行哪些请求方式
  12. config.addAllowedMethod("*");
  13. //放行哪些原始请求头部信息
  14. config.addAllowedHeader("*");
  15. //暴露哪些头部信息
  16. config.addExposedHeader("*");
  17. //2. 添加映射路径
  18. UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
  19. corsConfigurationSource.registerCorsConfiguration("/**",config);
  20. //3. 返回新的CorsFilter
  21. return new CorsFilter(corsConfigurationSource);
  22. }
  23. }

 b、重写WebMvcConfigurer(全局跨域)

  1. @Configuration
  2. public class CorsConfig implements WebMvcConfigurer {
  3. @Override
  4. public void addCorsMappings(CorsRegistry registry) {
  5. registry.addMapping("/**")
  6. //是否发送Cookie
  7. .allowCredentials(true)
  8. //放行哪些原始域
  9. .allowedOrigins("*")
  10. .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
  11. .allowedHeaders("*")
  12. .exposedHeaders("*");
  13. }
  14. }

c、使用注解 (局部跨域)

 在控制器(类上)上使用注解 @CrossOrigin:,表示该类的所有方法允许跨域

  1. @RestController
  2. @CrossOrigin(origins = "*")
  3. public class HelloController {
  4. @RequestMapping("/hello")
  5. public String hello() {
  6. return "hello world";
  7. }
  8. }

在方法上使用注解 @CrossOrigin: 

  1. @RequestMapping("/hello")
  2. @CrossOrigin(origins = "*")
  3. //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域
  4. public String hello() {
  5. return "hello world";
  6. }

d、手动设置响应头(局部跨域)

使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里 Origin的值也可以设置为 “*”,表示全部放行。

  1. @RequestMapping("/index")
  2. public String index(HttpServletResponse response) {
  3. response.addHeader("Access-Allow-Control-Origin","*");
  4. return "index";
  5. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/629179
推荐阅读
相关标签
  

闽ICP备14008679号