幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

SpringBoot跨域问题

  一、同源策略
  同源策略是由Netscape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是JSONP,JSONP虽然能解决跨域但是有一个很大的局限性,那就是只支持GET请求,不支持其他类型的请求,而今天我们说的CORS(跨域源资源共享)(CORS,Crossoriginresourcesharing)是一个W3C标准,它是一份浏览器技术的规范,提供了Web服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是JSONP模式的现代版。
  在Spring框架中,对于CORS也提供了相应的解决方案。非同源限制无法读取非同源网页的Cookie、LocalStorage和IndexedDB无法接触非同源网页的DOM无法向非同源地址发送AJAX请求二、java后端实现CORS跨域请求的方式返回新的CorsFilter重写WebMvcConfigurer使用注解CrossOrigin手动设置响应头(HttpServletResponse)自定webfilter实现跨域
  注意:CorFilterWebMvConfigurerCrossOrigin需要SpringMVC4。2以上版本才支持,对应springBoot1。3版本以上上面前两种方式属于全局CORS配置,后两种属于局部CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则,所以可以通过CrossOrigin注解来进行细粒度更高的跨域资源控制。其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域1。返回新的CorsFilter(全局跨域)
  在任意配置类,返回一个新的CorsFIlterBean,并添加映射路径和具体的CORS配置路径。ConfigurationpublicclassGlobalCorsConfig{BeanpublicCorsFiltercorsFilter(){1。添加CORS配置信息CorsConfigurationconfignewCorsConfiguration();放行哪些原始域config。addAllowedOrigin();是否发送Cookieconfig。setAllowCredentials(true);放行哪些请求方式config。addAllowedMethod();放行哪些原始请求头部信息config。addAllowedHeader();暴露哪些头部信息config。addExposedHeader();2。添加映射路径UrlBasedCorsConfigurationSourcecorsConfigurationSourcenewUrlBasedCorsConfigurationSource();corsConfigurationSource。registerCorsConfiguration(,config);3。返回新的CorsFilterreturnnewCorsFilter(corsConfigurationSource);}}2。重写WebMvcConfigurer(全局跨域)ConfigurationpublicclassCorsConfigimplementsWebMvcConfigurer{OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry。addMapping()是否发送Cookie。allowCredentials(true)放行哪些原始域。allowedOrigins()。allowedMethods(newString〔〕{GET,POST,PUT,DELETE})。allowedHeaders()。exposedHeaders();}}3。使用注解(局部跨域)
  在控制器(类上)上使用注解CrossOrigin:,表示该类的所有方法允许跨域。RestControllerCrossOrigin(origins)publicclassHelloController{RequestMapping(hello)publicStringhello(){returnhelloworld;}}
  在方法上使用注解CrossOrigin:RequestMapping(hello)CrossOrigin(origins)CrossOrigin(valuehttp:localhost:8081)指定具体ip允许跨域publicStringhello(){returnhelloworld;}4。手动设置响应头(局部跨域)
  用HttpServletResponse添加响应头AccessControlAllowOrigin授权原始域,这里Origin的值也可以设置为,表示全部放行。RequestMapping(index)publicStringindex(HttpServletResponseresponse){response。addHeader(AccessAllowControlOrigin,);returnindex;}5。使用自定义filter实现跨域
  首先编写一个过滤器,可以起名字为MyCorsFilter。javaComponentpublicclassMyCorsFilterimplementsFilter{publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletResponseresponse(HttpServletResponse)res;response。setHeader(AccessControlAllowOrigin,);response。setHeader(AccessControlAllowMethods,POST,GET,OPTIONS,DELETE);response。setHeader(AccessControlMaxAge,3600);response。setHeader(AccessControlAllowHeaders,xrequestedwith,contenttype);chain。doFilter(req,res);}publicvoidinit(FilterConfigfilterConfig){}publicvoiddestroy(){}}
  在web。xml中配置这个过滤器,使其生效!跨域访问STARTfilterfilternameCorsFilterfilternamefilterclasscom。mesnac。aop。MyCorsFilterfilterclassfilterfiltermappingfilternameCorsFilterfilternameurlpatternurlpatternfiltermapping!跨域访问END三、例子
  首先创建两个普通的SpringBoot项目,第一个命名为provider提供服务,第二个命名为consumer消费服务,第一个配置端口为8080,第二个配置配置为8081,然后在provider上提供两个hello接口,一个get,一个post,如下:RestControllerpublicclassProvider{GetMapping(hello)publicStringhello(){returnhello;}PostMapping(hello)publicStringhello2(){returnposthello;}}
  在consumer的resourcestemplates目录下创建一个html文件,发送一个简单的ajax请求,如下:!DOCTYPEhtmlhtmllangenheadmetacharsetUTF8titleCORStitleheadbodyinputtypebuttononclickbtnClick()valuegetbuttoninputtypebuttononclickbtnClick2()valuepostbuttonbodyhtml
  然后分别启动两个项目,发送请求按钮,观察浏览器控制台如下:
  AccesstoXMLHttpRequestathttp:localhost:8080hellofromoriginhttp:localhost:8081hasbeenblockedbyCORSpolicy:NoAccessControlAllowOriginheaderispresentontherequestedresource
  可以看到,由于同源策略的限制,请求无法发送成功。
  使用CORS可以在前端代码不做任何修改的情况下,实现跨域,那么接下来看看在provider中如何配置。首先可以通过CrossOrigin注解配置某一个方法接受某一个域的请求,如下:RestControllerpublicclassProvider{CrossOrigin(valuehttp:localhost:8081)GetMapping(hello)publicStringhello(){returnhello;}CrossOrigin(valuehttp:localhost:8081)PostMapping(hello)publicStringhello2(){returnposthello;}}
  这个注解表示这两个接口接受来自http:localhost:8081地址的请求,配置完成后,重启provider,再次发送请求,浏览器控制台就不会报错了,consumer也能拿到数据了。
  provider上,每一个方法上都去加注解未免太麻烦了,在SpringBoot中,还可以通过全局配置一次性解决这个问题,全局配置只需要在配置类中重写addCorsMappings方法即可,如下:ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry。addMapping()。allowedOrigins(http:localhost:8081)。allowedMethods()。allowedHeaders();}}
  表示本应用的所有方法都会去处理跨域请求,allowedMethods表示允许通过的请求数,allowedHeaders则表示允许的请求头。经过这样的配置之后,就不必在每个方法上单独配置跨域了。四、存在的问题
  了解了整个CORS的工作过程之后,我们通过Ajax发送跨域请求,虽然用户体验提高了,但是也有潜在的威胁存在,常见的就是CSRF(Crosssiterequestforgery)跨站请求伪造。跨站请求伪造也被称为oneclickattack或者sessionriding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,举个例子:
  假如一家银行用于运行转账操作的URL地址如下:img01。bs178。comajrm797c6e0c8941fc3a。jpg,那么,一个恶意攻击者可以在另一个网站上放置如下代码:,如果用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会遭受损失。
  基于此,浏览器在实际操作中,会对请求进行分类,分为简单请求,预先请求,带凭证的请求等,预先请求会首先发送一个options探测请求,和浏览器进行协商是否接受请求。默认情况下跨域请求是不需要凭证的,但是服务端可以配置要求客户端提供凭证,这样就可以有效避免csrf攻击。

春晚奇葩出圈合集马凡舒的敬酒服,张小斐的妆发,谭维维的遮瑕都说每年春晚,是最大的带货现场。果不其然,张小斐今年又是带货王,价值万元的大衣,10分钟就直接被售罄。紧接着,她穿的价值6500的鞋子,也被网友顶上热搜。这行……玛瑙手串的鉴别方法nbspnbsp多个角度出发助您买到正品玛瑙是石英的一种隐晶质变体,其特征是质地细腻且色彩鲜艳,硬度、折光率都明显高于普通玉石,深得收藏家的喜爱。大家在购买的时候,需要科学鉴别是否是正品玛瑙。玛瑙是现代玉石市场……图手工编织有多少编法一双巧手造就传统工艺手工编织用简单的材料就能创造出具有欣赏价值的精美物品,以下有几种非常容易上手的编法介绍给大家,让你随时随地都能进行创作,以下内容可全部都是干货哦。首先我来介绍一种非常简单……猫眼石手镯有什么效果nbspnbsp增强免疫力的天然佳品说起猫眼石,想必不少爱美的女性对它不陌生,由于它在光线的照耀下看起来就像是猫的眼瞳,变换多端,堪称具有猫眼效应的金绿宝石。佩戴在身上还具有增强免疫力的功效。猫眼石,作为金……图大家都爱玩的羊毛毡是什么轻松学会只需5步在家无聊,不想看剧、玩游戏的时候该做些什么好?简单易学、好玩好看的羊毛毡戳戳乐是一个不错的选择。无论你心灵手巧,还是眼拙手笨,只需5步,就能做出可爱的戳戳乐。漫漫长假,不……翡翠和玉的区别nbsp小诀窍教你快速分辨区分翡翠和玉有什么区别,简单的办法就是拿翡翠或者玉往玻璃上划,因为翡翠与玉的硬度不一样,翡翠是非常硬的,被称为硬玉,而剩下的玉都被称为软玉。翡翠和玉很多人以为是不同的的,……事实就是,这位日本设计师对中式元素的运用至今影响国潮2017年,一个名为tokyofashion的日本时尚网站刊登了在东京街头拍摄的两位日本女孩照片,文字描述她们都穿了中式风格的上衣,右边的女生搭配JeanPaulGaultie……碧玺手链禁忌有哪些nbsp佩戴应遵循左进右出原则碧玺是我国无数珍宝中的奇葩,它色泽明亮、颜色丰富、晶莹饱满,巧通灵性,是女性优先选择的首饰配件。可是,碧玺虽美,但佩戴的时候却很有讲究,并非所有人都适合碧玺。随着珠宝行业……图简笔画人物动手创造奇妙色彩对于每个人来说,简笔画都是一种比较容易掌握的画画技术。不仅深受小孩的喜爱,更受到年轻朋友们的喜爱。简笔画不仅可以画出简单的人物,更能够画出各种不同的场景。简笔画是一种言简……绿松石原石怎么鉴别真假nbspnbsp3个技巧帮你避免上当绿松石原石,作为上帝赐予我们人类的天然圣宝,深受不少广大群众的喜爱。但市面上琳琅满目的绿松石原石,真真假假看得让人眼花缭乱。因此,掌握几个辨别技巧是很重要的。绿松石原石,……山冈晃外山圭一郎,全新作品野狗子正式公开外山圭一郎(《重力异想世界》《寂静岭》《死魂曲》)在离开SIEJapan工作室后,成立了新工作室BokehGameStudio,集结了不少行业内的大佬。在今天的TGA20……欢乐颂3杀青!江疏影晒新五美合影,演员大换血恐失收视率1月11日,江疏影在网上晒出了杀青照,她的新戏《欢乐颂3》正式杀青了!曾经《欢乐颂1》大获成功,实现了口碑、收视的双丰收,也让刘涛、杨紫再度翻红,让关雎尔的饰演者乔欣也进……
超越硅芯片?光基技术新宠铌酸锂有望应用于月球导航系统财联社上海1月29日讯(编辑黄君芝)近期,澳大利亚皇家墨尔本理工大学(RMITUniversity)的科学家们发现,由铌酸锂制成的超薄芯片将在光基技术上超过硅片,其潜在应用范围……图莫言散文里你所不知道的隐藏的内容真是令人吃惊莫言散文里面隐藏着的内容,真是令人吃惊。对于莫言这个人,也许我们早就认识了他,他是中国诺贝尔文学奖的获得者。但是对于他所写的散文,我们真正的了解过吗?我们很熟悉莫言的作品……紫水晶的寓意是什么nbsp代表甜蜜的爱情天然产出的紫水晶因含铁、锰等矿物质而周身呈现出神秘的紫色,其主要成分是二氧化硅,折光率很高,晶莹剔透。同时,紫水晶寓意很深刻,忠贞爱情的象征。紫水晶是一种典雅神秘的宝石,……老牛捉妖0117西安饮食反抽,湘财晋级3连板,通达动力马失前北向资金继续买买买模式,内资机构依旧躺躺躺模式。一边是天堂一边是地狱。通达动力、合力泰、金发拉比、天威视讯上演各种反包大戏,但是安妮股份和黑芝麻被核按钮,安奈儿和麦趣尔破位A杀……图七夕是几月几日倾听其背后的浪漫爱情故事七夕节对于中国人来说是一个很重要的节日,它曾是妇女乞求智巧的节日,后来演变成情人相会的节日。七夕节在每年的七月初七,它的背后,还有一个流传千年的浪漫爱情故事。七夕节是大名……猫眼石手链nbsp昂贵但受人吹捧的珠宝猫眼石是十分昂贵而且稀有的珠宝,由它串成的手链不止美观时尚,而且还有着很多对人体有好处的功效,可以帮助消炎、提高人体免疫力,广受人们追捧和喜爱。猫眼石是珠宝中比较名贵的一……openEuler开源新项目,嵌入式实时虚拟机ZVM介绍嵌入式实时虚拟机ZVM(ZephyrbasedVirtualMachine)是由湖南大学嵌入式与网络计算湖南省重点实验室(以下简称湖大嵌入式实验室)主任谢国琪教授主导设计并开发……原神游戏机制副词条强化数值探讨游戏新春创作纪Ace原创关于圣遗物副词条的强化机制,米游社有很多帖子,甚至还有算概率的,这里不多赘述。仅提两点:副词条有10种属性,每种属性有4个初始值……项链长度影响大nbspnbspnbsp它能决定其佩戴价值项链是用金银、珠宝等制成的挂在颈上的链条形状的首饰,是人体的装饰品之一。项链除了具有装饰功能外,有些项链还具有特殊显示作用,如天主教徒的十字架链和佛教徒的念珠。项链是我们……子宫内膜息肉多次复发,是癌变?子宫内膜息肉有那么可怕吗?小刘来门诊时一脸愁容,因为她今年33岁,与爱人结婚6年,仍然没有怀孕。夫妻二人为了要一个孩子看了多家医院,中药、西药吃了一箩筐,可就是不见好。听周围的朋友介绍,北京安太医院可以……春季养肝护肝,建议多吃3菜2汤1凉菜,滋补肝脏身体棒,家人爱大家好这里是香姐说美食,每天分享好吃的家常菜。寒冷的冬天过去了,生机勃勃的春天到来了。春季是人体代谢旺盛的季节,是滋补营养养肝护肝的季节。自古以来,我们都知道绿色食物对肝脏好,……黑玛瑙的功效与作用nbsp消灾辟邪保平安黑玛瑙是一种具有辟邪开运效果的宝石,我们经常佩戴对于增加个人魅力和亲和力也是很有帮助的。不过关于黑玛瑙的功效可远远不止这些,下面就给大家详细介绍吧。黑玛瑙是玛瑙的一种,在……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网