在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot實現跨域的5種方式

jf_ro2CN3Fa ? 來源:CSDN ? 2023-04-27 10:32 ? 次閱讀

一、為什么會出現跨域問題

出于瀏覽器的同源策略限制。同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。

同源策略會阻止一個域的javascript腳本和另外一個域的內容進行交互。所謂同源(即指在同一個域)就是兩個頁面具有相同的協議(protocol),主機(host)和端口號(port)

二、什么是跨域

當一個請求url的協議、域名、端口三者之間任意一個與當前頁面url不同即為跨域

90c3d012-e41d-11ed-ab56-dac502259ad0.png

三、非同源限制

無法讀取非同源網頁的 Cookie、LocalStorage 和 IndexedDB

無法接觸非同源網頁的 DOM

無法向非同源地址發送 AJAX 請求

四、java 后端 實現 CORS 跨域請求的方式

對于 CORS的跨域請求,主要有以下幾種方式可供選擇:

返回新的CorsFilter

重寫 WebMvcConfigurer

使用注解 @CrossOrigin

手動設置響應頭 (HttpServletResponse)

自定 web filter 實現跨域

注意:

CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支持,對應springBoot 1.3版本以上

上面前兩種方式屬于全局 CORS 配置,后兩種屬于局部 CORS配置。如果使用了局部跨域是會覆蓋全局跨域的規則,所以可以通過 @CrossOrigin 注解來進行細粒度更高的跨域資源控制。

其實無論哪種方案,最終目的都是修改響應頭,向響應頭中添加瀏覽器所要求的數據,進而實現跨域

1.返回新的 CorsFilter(全局跨域)

在任意配置類,返回一個 新的 CorsFIlter Bean ,并添加映射路徑和具體的CORS配置路徑。

@Configuration
publicclassGlobalCorsConfig{
@Bean
publicCorsFiltercorsFilter(){
//1.添加CORS配置信息
CorsConfigurationconfig=newCorsConfiguration();
//放行哪些原始域
config.addAllowedOrigin("*");
//是否發送Cookie
config.setAllowCredentials(true);
//放行哪些請求方式
config.addAllowedMethod("*");
//放行哪些原始請求頭部信息
config.addAllowedHeader("*");
//暴露哪些頭部信息
config.addExposedHeader("*");
//2.添加映射路徑
UrlBasedCorsConfigurationSourcecorsConfigurationSource=newUrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",config);
//3.返回新的CorsFilter
returnnewCorsFilter(corsConfigurationSource);
}
}

2. 重寫 WebMvcConfigurer(全局跨域)

@Configuration
publicclassCorsConfigimplementsWebMvcConfigurer{
@Override
publicvoidaddCorsMappings(CorsRegistryregistry){
registry.addMapping("/**")
//是否發送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOrigins("*")
.allowedMethods(newString[]{"GET","POST","PUT","DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}

3. 使用注解 (局部跨域)

控制器(類上)上使用注解 @CrossOrigin:,表示該類的所有方法允許跨域。

@RestController
@CrossOrigin(origins="*")
publicclassHelloController{
@RequestMapping("/hello")
publicStringhello(){
return"helloworld";
}
}

在方法上使用注解 @CrossOrigin:

@RequestMapping("/hello")
@CrossOrigin(origins="*")
//@CrossOrigin(value="http://localhost:8081")//指定具體ip允許跨域
publicStringhello(){
return"helloworld";
}

4. 手動設置響應頭(局部跨域)

使用 HttpServletResponse 對象添加響應頭(Access-Control-Allow-Origin)來授權原始域,這里 Origin的值也可以設置為 “*”,表示全部放行。

@RequestMapping("/index")
publicStringindex(HttpServletResponseresponse){
response.addHeader("Access-Allow-Control-Origin","*");
return"index";
}

5. 使用自定義filter實現跨域

首先編寫一個過濾器,可以起名字為MyCorsFilter.java

packagecom.mesnac.aop;

importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletResponse;
importorg.springframework.stereotype.Component;
@Component
publicclassMyCorsFilterimplementsFilter{
publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{
HttpServletResponseresponse=(HttpServletResponse)res;
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");
response.setHeader("Access-Control-Max-Age","3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
chain.doFilter(req,res);
}
publicvoidinit(FilterConfigfilterConfig){}
publicvoiddestroy(){}
}

在web.xml中配置這個過濾器,使其生效

 

CorsFilter
com.mesnac.aop.MyCorsFilter


CorsFilter
/*

 




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    113

    文章

    16503

    瀏覽量

    179891
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    20223
  • 過濾器
    +關注

    關注

    1

    文章

    433

    瀏覽量

    19786
  • CORS
    +關注

    關注

    1

    文章

    7

    瀏覽量

    8981

原文標題:Spring Boot 實現跨域的 5 種方式,總有一種適合你,建議收藏

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    多位寬數據通過握手方式時鐘

    對于多位寬數據,我們可以采用握手方式實現時鐘操作。該方式可直接使用xpm_cdc_handshake
    的頭像 發表于 05-06 09:22 ?1275次閱讀
    多位寬數據通過握手<b class='flag-5'>方式</b><b class='flag-5'>跨</b>時鐘<b class='flag-5'>域</b>

    Spring Boot如何實現異步任務

    Spring Boot 提供了多種方式實現異步任務,這里介紹三主要實現
    的頭像 發表于 09-30 10:32 ?1497次閱讀

    Spring Boot連接數據庫的三方式

    Spring Boot——三方式連接數據庫
    發表于 04-20 07:58

    啟動Spring Boot項目應用的三方法

    首先大家了解什么是Spring BootSpring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用
    發表于 01-14 17:33

    Spring Boot嵌入式Web容器原理是什么

    ,不需要配置任何特殊的XML配置,為了這個目標,Spring BootSpring 4.0框架之上提供了很多特性,幫助應用以“約定優于配置”“開箱即用”的方式來啟動應用并運行上下文。
    發表于 12-16 07:57

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?690次閱讀

    Spring認證」什么是Spring GraphQL?

    這個項目建立在 Boot 2.x 上,但它應該與最新的 Boot2.4.x5 相關。 要創建項目,請轉到start.spring.io并為要使用的GraphQL傳輸選擇啟動器: 啟動機 運輸 執行
    的頭像 發表于 08-10 14:08 ?885次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?983次閱讀

    Spring Boot Web相關的基礎知識

    Boot的第一個接口。接下來將會將會介紹使用Spring Boot開發Web應用的相關內容,其主要包括使用spring-boot-starter-web組件來
    的頭像 發表于 03-17 15:03 ?709次閱讀

    Spring Boot中整合兩定時任務的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務實現
    的頭像 發表于 04-07 14:55 ?1624次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩<b class='flag-5'>種</b>定時任務的方法

    Spring Boot如何優雅實現數據加密存儲、模糊匹配和脫敏

    近來我們都在圍繞著使用Spring Boot開發業務系統時如何保證數據安全性這個主題展開總結,當下大部分的B/S架構的系統也都是基于Spring Boot + SpringMVC三層架
    的頭像 發表于 06-19 14:42 ?2075次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>如何優雅<b class='flag-5'>實現</b>數據加密存儲、模糊匹配和脫敏

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring
    的頭像 發表于 10-09 17:11 ?696次閱讀

    Spring Boot啟動 Eureka流程

    在上篇中已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 E
    的頭像 發表于 10-10 11:40 ?959次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?709次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    ,這樣我們就可以盡快的上手。 使用 Spring Boot 來不僅可以創建基于 war 方式部署的傳統Java應用程序,也可以通過創建獨立的不依賴任何容器(如 tomcat 等)
    的頭像 發表于 10-13 14:56 ?631次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 免费高清特级毛片 | 丁香色综合 | 久热精品在线视频 | 欧美日韩国产成人高清视频 | 天天干夜夜草 | 久久精品国产亚洲综合色 | 免费黄色的视频 | 91男女视频| 三级在线观看免播放网站 | 午夜视频吧 | 国产小视频在线观看免费 | 玖玖玖精品视频免费播放 | 久久久免费视频观看 | 午夜视频免费看 | 美女视频黄又黄又免费高清 | 欧美日一区二区三区 | www.久久在线| 特黄色片| 天天精品视频 | 亚洲成在人线影视天堂网 | 国产一区二区三区波多野吉衣 | 男女免费在线视频 | xxxxxx日本人免费 | 欧美宗合网 | 手机看片福利国产 | 欧美性生活网站 | 国产理论最新国产精品视频 | 女人张开双腿让男人桶完整 | 亚洲人成影网站~色 | 色www永久免费视频 色y情视频免费看 | 亚洲视频一二三 | 天天干天天色天天 | 视频在线观看高清免费大全 | 五月天天爱 | 天天做天天爱天天一爽一毛片 | 美女色黄一男一女 | 国模私拍大尺度视频在线播放 | 欧美成人综合在线 | 国产nv精品你懂得 | 狠狠五月婷婷 | 午夜视频在线免费 |