博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第20章—跨域访问(CORS)
阅读量:5060 次
发布时间:2019-06-12

本文共 2374 字,大约阅读时间需要 7 分钟。

spring boot 系列学习记录:

码云源码地址:

本次练习在之前基础上进行。

一、为什么

  对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现。

  针对跨域问题,我们可能第一个想到的解决方案就是jsonp,并且以前处理跨域问题我基本也是这么处理。但是jsonp方式也同样有不足,不管是对于前端还是后端来说,写法与我们平常的ajax写法不同,同样后端也需要作出相应的更改。并且,jsonp方式只能通过get请求方式来传递参数,当然也还有其它的不足之处,本文主要所要讲的,在springboot中通过cors协议解决跨域问题。

二、CORS介绍

  简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing,即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可。

三、CORS实现跨域访问

  • 方式1:继承WebMvcConfigurerAdapter类,重写addCorsMappings方法
  • 方式2:继承WebMvcConfigurer接口,重写addCorsMappings方法
  • 方式3:返回新的CorsFilter
  • 方式4:使用注解(@CrossOrigin)

方式1

  在任意配置类,继承WebMvcConfigurerAdapter类,并重写其提供的跨域请求处理的接口,目的是添加映射路径和具体的CORS配置信息。

@Configurationpublic class CorsConfig extends WebMvcConfigurerAdapter {    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**");    }}

方式2

  在任意配置类,WebMvcConfigurer接口,并重写其提供的跨域请求处理的接口,目的是添加映射路径和具体的CORS配置信息。

@Configurationpublic class CorsConfig implements WebMvcConfigurer {    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**");    }}

方式3

  在任意配置类,返回一个新的CorsFilter Bean,并添加映射路径和具体的CORS配置信息。

@Configurationpublic class GlobalCorsConfig {    @Bean    public CorsFilter corsFilter() {        //1.添加CORS配置信息        CorsConfiguration config = new CorsConfiguration();        //放行哪些原始域        config.addAllowedOrigin("*");        //是否发送Cookie信息        config.setAllowCredentials(true);        //放行哪些原始域(请求方式)        config.addAllowedMethod("*");        //放行哪些原始域(头部信息)        config.addAllowedHeader("*");        //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)        config.addExposedHeader("token");        //2.添加映射路径        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();        configSource.registerCorsConfiguration("/**", config);        //3.返回新的CorsFilter.        return new CorsFilter(configSource);    }}

方式4

  在方法上(@RequestMapping、@GetMapping等)使用注解 @CrossOrigin ,或者在控制器(@Controller)上使用注解 @CrossOrigin :

@CrossOrigin    @GetMapping("list")    public List userList() {        return userService.list();    }
@CrossOrigin@RestController@RequestMapping("/api/user/*")public class UserController {   .......  }

 

四、测试

  通过打开本地网页模拟跨域情况,或者可以自己运行两个项目(前端、后端),将之前项目的页面代码拷贝到本地

 

  并修改接口url为http://localhost:8080/api/user/list

 

  不使用以上跨域方式的结果:

 

  使用以上跨域方式的结果:

 

转载于:https://www.cnblogs.com/jinxiaohang/p/8414697.html

你可能感兴趣的文章
Windows Phone Marketplace 发布软件全攻略
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
语义web基础知识学习
查看>>
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>