SpringBoot 中實現(xiàn)跨域的5種方式_第1頁
SpringBoot 中實現(xiàn)跨域的5種方式_第2頁
SpringBoot 中實現(xiàn)跨域的5種方式_第3頁
SpringBoot 中實現(xiàn)跨域的5種方式_第4頁
SpringBoot 中實現(xiàn)跨域的5種方式_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論