版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
SpringBoot中實現(xiàn)跨域的5種方式一、為什么會出現(xiàn)跨域問題出于瀏覽器的同源策略限制。同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響??梢哉fWeb是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現(xiàn)。同源策略會阻止一個域的javascript腳本和另外一個域的內(nèi)容進行交互。所謂同源(即指在同一個域)就是兩個頁面具有相同的協(xié)議(protocol),主機(host)和端口號(port)二、什么是跨域當一個請求url的協(xié)議、域名、端口三者之間任意一個與當前頁面url不同即為跨域三、非同源限制【1】無法讀取非同源網(wǎng)頁的Cookie、LocalStorage和IndexedDB【2】無法接觸非同源網(wǎng)頁的DOM【3】無法向非同源地址發(fā)送AJAX請求四、java后端實現(xiàn)CORS跨域請求的方式對于CORS的跨域請求,主要有以下幾種方式可供選擇:返回新的CorsFilter重寫WebMvcConfigurer使用注解@CrossOrigin手動設置響應頭(HttpServletResponse)自定webfilter實現(xiàn)跨域注意:CorFilter/WebMvConfigurer/@CrossOrigin需要SpringMVC4.2以上版本才支持,對應springBoot1.3版本以上上面前兩種方式屬于全局CORS配置,后兩種屬于局部CORS配置。如果使用了局部跨域是會覆蓋全局跨域的規(guī)則,所以可以通過
@CrossOrigin注解來進行細粒度更高的跨域資源控制。其實無論哪種方案,最終目的都是修改響應頭,向響應頭中添加瀏覽器所要求的數(shù)據(jù),進而實現(xiàn)跨域。1.返回新的CorsFilter(全局跨域)在任意配置類,返回一個新的CorsFIlterBean,并添加映射路徑和具體的CORS配置路徑。@Configuration
public
class
GlobalCorsConfig
{
@Bean
public
CorsFilter
corsFilter()
{
//1.
添加
CORS配置信息
CorsConfiguration
config
=
new
CorsConfiguration();
//放行哪些原始域
config.addAllowedOrigin("*");
//是否發(fā)送
Cookie
config.setAllowCredentials(true);
//放行哪些請求方式
config.addAllowedMethod("*");
//放行哪些原始請求頭部信息
config.addAllowedHeader("*");
//暴露哪些頭部信息
config.addExposedHeader("*");
//2.
添加映射路徑
UrlBasedCorsConfigurationSource
corsConfigurationSource
=
new
UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",config);
//3.
返回新的CorsFilter
return
new
CorsFilter(corsConfigurationSource);
}
}2.重寫WebMvcConfigurer(全局跨域)@Configuration
public
class
CorsConfig
implements
WebMvcConfigurer
{
@Override
public
void
addCorsMappings(CorsRegistry
registry)
{
registry.addMapping("/**")
//是否發(fā)送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOrigins("*")
.allowedMethods(new
String[]{"GET",
"POST",
"PUT",
"DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}3.使用注解(局部跨域)在控制器(類上)上使用注解@CrossOrigin:,表示該類的所有方法允許跨域。搜索公眾號后端架構師后臺回復“架構整潔”,獲取一份驚喜禮包。@RestController
@CrossOrigin(origins
=
"*")
public
class
HelloController
{
@RequestMapping("/hello")
public
String
hello()
{
return
"hello
world";
}
}
在方法上使用注解@CrossOrigin:@RequestMapping("/hello")
@CrossOrigin(origins
=
"*")
//@CrossOrigin(value
=
"http://localhost:8081")
//指定具體ip允許跨域
public
String
hello()
{
return
"hello
world";
}4.手動設置響應頭(局部跨域)使用HttpServletResponse對象添加響應頭(Access-Control-Allow-Origin)來授權原始域,這里Origin的值也可以設置為“*”,表示全部放行。@RequestMapping("/index")
public
String
index(HttpServletResponse
response)
{
response.addHeader("Access-Allow-Control-Origin","*");
return
"index";
}5.使用自定義filter實現(xiàn)跨域首先編寫一個過濾器,可以起名字為MyCorsFilter.javapackage
com.mesnac.aop;
import
java.io.IOException;
import
javax.servlet.Filter;
import
javax.servlet.FilterChain;
import
javax.servlet.FilterConfig;
import
javax.servlet.ServletException;
import
javax.servlet.ServletRequest;
import
javax.servlet.ServletResponse;
import
javax.servlet.http.HttpServletResponse;
import
org.springframework.stereotype.Component;
@Component
public
class
MyCorsFilter
implements
Filter
{
public
void
doFilter(ServletRequest
req,
ServletResponse
res,
FilterChain
chain)
throws
IOException,
ServletException
{
HttpServletResponse
response
=
(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);
}
public
void
init(FilterConfig
filterConfig)
{}
public
void
destroy()
{}
}在web.xml中配置這個過濾器,使其生效
<filter>
<filter-name>CorsFilterfilter-name>
<filter-class>com.mesnac.aop.MyCorsFilterfilter-cla
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學高分通關題型題庫附解析答案
- 山西省煤礦建設六個標準目錄3篇
- 高三綜評自我陳述報告
- 期貨入門知識
- 地板磚買賣協(xié)議2024年
- 2024商業(yè)借款保障協(xié)議規(guī)范
- 新人教版數(shù)學第二十五章-概率初步全章教學設計
- 2024年制定商品銷售返購協(xié)議樣例
- 2024年度房產(chǎn)項目融資安排協(xié)議
- 2024年化建筑工程施工承包協(xié)議
- 《應用統(tǒng)計學》(第4版)-自測試卷及答案B卷
- 《賦能年輕一代、共筑韌性未來》國際減災日主題班會教案
- 10.1愛護身體(課件)-2024-2025學年統(tǒng)編版道德與法治七年級上冊
- 2024口腔執(zhí)業(yè)醫(yī)師聘用合同
- 2024-2025學年人教版生物七年級上冊期中備考重點知識
- 低空經(jīng)濟招商引資策略與措施
- 四川省成都市2023-2024學年高一上學期語文期中考試試卷(含答案)
- 第10課《我們不亂扔》(課件)-部編版道德與法治二年級上冊
- 少兒美術幼兒園課件- 4-6歲 《秋梨》
- 小學六年級數(shù)學計算題100道(含答案)
- 部編版小學語文四年級上冊第六單元教材分析解讀課件
評論
0/150
提交評論