刚入职的后端开发问我SpringBoot如何跨域配置?我表示

2023-06-01 0 305

1. 序言

布吕马,两个可有可无的热门话题,无论后端后端,布吕马单厢碰到。而那时,我就跟我们撷取一则有关【布吕马】的该文,期望能给我们增添点不那样的斩获。

2. 自然环境表明

js拷贝标识符自然环境表明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

3. 甚么是布吕马?

具体来说,答我们个难题,甚么是布吕马?估算许多爸爸妈妈单厢那么提问,布吕马不是如果允诺的 url 相同,就会导致布吕马,要说,是这种的,可不可以具体内容点?

简而言之布吕马,只不过就比方说这种,A端向B端推送允诺,若B端门牌号协定、搜索引擎、路由器二者间任一两个与A端址协定、搜索引擎、路由器中的两个相同,这二者出访就布吕马了。

给我们举两个布吕马的范例,远距我们认知。

1.http://localhost:8080/ -> http://localhost:9090/ 布吕马其原因:路由器号相同。

2.http://10.10.10.10:8080/ -> http://20.20.20.20:8080/ 布吕马其原因:PS3ip(搜索引擎)相同。

3.http://localhost:8080/ -> https://localhost:8080/ 布吕马其原因:搜索引擎相同(http/https)。

4.www.test.com/ -> test.test.com/ 布吕马其原因:子搜索引擎相同。

4. 为甚么会布吕马?

难道确切了布吕马基本概念,那我晓得为何会再次出现布吕马嘛?这只不过就得从应用程序层起程了。或许会造成布吕马,是虽然应用程序的相混思路,应用程序对javascript施予的一类安全可靠管制。

简而言之相混思路,可以看成是一类约定,它是应用程序最核心也是最基本的安全可靠功能,如果缺少了相混思路,则应用程序的正常功能都可能会受到影响。可以说Web是构建在相混思路基础之上的,应用程序只是针对相混思路的一类实现。相混思路会阻止两个域的。javascript脚本和另外两个域的内容进行交互。简而言之相混(即指在同两个域)是两个页面具有相同的协定,搜索引擎和路由器。

5. 怎样解决布吕马?

当我们对布吕马基本概念有一定的基础认知之后,我们就应该要学习怎样解决布吕马这种难题,你晓得布吕马,但你如果不会处理布吕马,那就很掉身份啦,因为解决布吕马的方式许多许多,你只需要晓得常用的几种处理方式就好了,又不是让自己都得掌握,对吧。

所以,接下来,我给我们诺列了解决布吕马的一些方法,不要求我们都能掌握,但好歹晓得这种方式能处理跨域即可。具体内容如下:

1.改发jsonp

利用的是 script 标签 src 属性允诺 js 无布吕马难题,但具有局限性,只能推送 get 允诺.

2.布吕马资源共享(CORS)

CORS是两个W3C标准,全称是”布吕马资源共享”,它允许应用程序向跨源服务器发出XMLHttpRequest允诺,从而解决了ajax只能相混使用的管制。但CORS需要应用程序和服务器都同时支持。目前,所有应用程序都支持该功能;支持各种方式允诺(post,get….)。

3.nginx代理布吕马

将相同的协定、搜索引擎、路由器代理到与目标url一致的处理方式。

4.nodejs中间件代理布吕马

在本地启两个nodeis服务器转接代理,后端允诺本地服务器,可在自己标识符中设置布吕马可出访,而后端转接允诺后端是没有布吕马难题的(需要真实允诺的门牌号设置可出访才可取得数据)。

5.WebSocket协定布吕马

它是一类应用程序的API,它的目标是在两个单独的持久连接上提供全双工、双向通信。(相混思路对web sockets不适用)web sockets原理:在JS创建了web socket之后,会有两个HTTP允诺推送到应用程序以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协定交换为web sockt协定。 只有在支持web socket协定的服务器上才能正常工作。

6. springboot布吕马实用性

接着,我们通过在springboot项目中实用性cors,起到防止布吕马的目的。虽然springboot本身就支持cors,所以你只需要实现 addCorsMappings 接口,就可以添加规则来允许布吕马出访,具体内容标识符如下,我们请看:

typescript拷贝标识符/** * 布吕马实用性 */ @Configuration public class CorsConfig implements WebMvcConfigurer { /** * 布吕马注册器 * *@param registry 布吕马注册器 */ @Override public void addCorsMappings(CorsRegistry registry) { // 设置允许布吕马的路径 registry.addMapping(“/**”) // 设置允许布吕马允诺的搜索引擎 .allowedOrigins(“*”) // 是否允许证书 不再默认开启 .allowCredentials(true) // 设置允许的方法 .allowedMethods(“*”) // 设置允许的头 .allowedHeaders(“*”) // 布吕马允许时间 .maxAge(3600); } }

通过上面的实用性,我们可以看到,是火力全开啊,把所有的拦截都放开了,允许了所有的布吕马搜索引擎等。你也可以单独设置添加,比如管制只允许www.test.com的搜索引擎出访,那你可以那么设置:

arduino拷贝标识符.allowedOrigins(“http://www.test.com”)

再比如限定只能对 /test 下的所有接口进行布吕马出访,同时只能出访 GET 和 POST 方法,那你这种设置即可。

arduino拷贝标识符registry.addMapping(“/test/**”) .allowedMethods(“POST”, “GET”);

… …

    ok,以上是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累两个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

作者:bug菌

链接:

https://juejin.cn/post/7233208763921858616

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务