springboot跨域处理,前后端分离如何解决跨域问题
00-1010跨域问题有哪些解决方案?三种解决方案的总结
00-1010如果你想知道什么是跨域,我们可以通过一个小案例简单的理解一下跨域的概念:在编写项目代码的时候,我们把前端项目代码和后端项目代码分开,一个本地8080端口,一个本地8888端口,也就是我们常说的前端分离项目。现在使用前端请求调用后端接口会产生以下错误
corspolicy 3360已阻止从源“3358 localhost 33608080”访问“3358 localhost 33608080请求名称”处的XMLHttpRequest。请求资源上不存在“access-control-allow-origin”标头。
原因:基于浏览器保护机制,当请求中缺少一些http头信息时,读取响应的操作会被阻塞。这个问题并不意味着后端没有收到前端发送的请求。相反,后端收到请求,向前端返回响应信息,但返回的响应信息被前端浏览器截获。
这种保护机制是一种重要的浏览器安全策略,3354同源策略,可以限制不同来源之间的交互,从而有效避免一些浏览器级的攻击。所谓同源,就是url中的协议、域名、端口都是一样的。另一方面,案例的url前端是http://localhost :8080 request http://localhost :8888/request name,协议和域名都是平等的,但是端口不一样,导致两个不同的来源,会导致跨域问题。
00-1010 CROS(Cross Origin Resource Sharing)策略,全称为跨域资源共享策略,是后端用来解决跨域问题的方案(当然前端也有相应的解决跨域问题的方案)。先抛开底部的具体解决原则,今天就来学习一下如何用这个策略解决跨域问题。
00-1010第一个也是最简单但不常用的一个。你只需要在后端接口方法中添加@CrossOrigin注释,就可以解决这个接口方法请求的跨域问题。但是实际开发中通常会有很多方法,给每个方法加上这个注释显然会影响你的体验。当然,你也可以给一个类添加注释,说明这个类中的所有方法都解决了跨域问题,但是如果类不止一个就麻烦了。
@ cross origin @ get mapping(/request name )公共字符串say hello () {return hello world!;}二是使用过滤器进行统一处理。
//通过对比,不要把包引到错误的导入org . spring framework . context . annotation . bean;导入org . spring framework . web . CORS . CORS configuration;导入org . spring framework . web . CORS . urlbasedcorsconfigurationsource;导入org . spring framework . web . filter . CORS filter;@ configuration public class CORS config { @ Bean public CORS filter CORS filter(){ CORS configuration CORS configuration=new CORS configuration();//使用通配符*允许所有域请求CORS configuration . addallowedorigin( * );//使用通配符*允许所有请求头字段CORS configuration . addallowedheader( * );//使用通配符*允许所有请求标头方法类型CORS configuration . addallowedmethod( * );UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();//处理请求映射source . registercorsconfiguration(/* * ,CORS configuration);返回新的CorsFilter(源);}}第三种是使用WebMvc的配置类。
//对比着看,包千万别导错了导入org。spring框架。语境。注释。配置;导入组织。spring框架。网络。servlet。配置。注释。CORS登记处;导入org。spring框架。网络。servlet。配置。注释。webmvc配置器;@配置公共类WebMvcConfig实现WebMvcConfigurer { @ Override public void addCorsMappings(CORS注册表注册表){ registry。添加映射(/* *)//设置映射.allowedOriginPatterns(*) //设置域.allowedMethods(*) //设置请求的方式获取、发布等.allowCredentials(true) //设置是否携带饼干maxAge(3600) //设置设置的有效期秒单位.允许的标头(" * ");//设置头}}
目录
到此这篇关于跳羚前后端分离解决跨域问题的3种解决方案的文章就介绍到这了,更多相关跳羚前后端分离跨域问题内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。