国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring CORS 跨域使用與原理(@CrossOrigin注解,Java配置類(lèi)方式,xml方式)

這篇具有很好參考價(jià)值的文章主要介紹了Spring CORS 跨域使用與原理(@CrossOrigin注解,Java配置類(lèi)方式,xml方式)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Spring CORS 跨域使用與原理(@CrossOrigin注解,Java配置類(lèi)方式,xml方式)

出于安全原因,瀏覽器禁止AJAX調(diào)用當(dāng)前源之外的資源。

跨域資源共享(CORS)是由大多數(shù)瀏覽器實(shí)現(xiàn)的W3C規(guī)范,它允許您以一種靈活的方式指定授權(quán)哪種跨域請(qǐng)求,而不是使用一些不太安全、功能不太強(qiáng)大的hack(如IFrame或JSONP)。

Spring Framework 4.2 GA為CORS提供了一流的開(kāi)箱即用支持,為我們提供了一種比典型的基于過(guò)濾器的解決方案更簡(jiǎn)單、更強(qiáng)大的配置方式。

一、注解方式使用

1.方法上添加@CrossOrigin注解
@RestController
@RequestMapping("/account")
public class AccountController {

	@CrossOrigin
	@GetMapping("/{id}")
	public Account retrieve(@PathVariable Long id) {
		// ...
	}

	@DeleteMapping("/{id}")
	public void remove(@PathVariable Long id) {
		// ...
	}
}

使用此種方式只會(huì)對(duì)當(dāng)前方法生效。

2.Controller上添加@CrossOrigin注解
@CrossOrigin
@RestController
@RequestMapping("/account")
public class AccountController {

	@GetMapping("/{id}")
	public Account retrieve(@PathVariable Long id) {
		// ...
	}

	@DeleteMapping("/{id}")
	public void remove(@PathVariable Long id) {
		// ...
	}
}

使用此種方式會(huì)對(duì)整個(gè)Controller生效。

3.@CrossOrigin的兩個(gè)參數(shù)使用
  1. origins: 允許可訪問(wèn)的域列表
  2. maxAge:準(zhǔn)備響應(yīng)前的緩存持續(xù)的最大時(shí)間(以秒為單位)
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

	@GetMapping("/{id}")
	public Account retrieve(@PathVariable Long id) {
		// ...
	}

	@DeleteMapping("/{id}")
	public void remove(@PathVariable Long id) {
		// ...
	}
}

這兩個(gè)參數(shù)也可以分開(kāi)單獨(dú)使用,如下所示:

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

	@CrossOrigin(origins = "http://domain2.com")
	@GetMapping("/{id}")
	public Account retrieve(@PathVariable Long id) {
		// ...
	}

	@DeleteMapping("/{id}")
	public void remove(@PathVariable Long id) {
		// ...
	}
}
4.注意事項(xiàng)

如果有正在使用Spring Security,需要在Spring Security中啟用CORS,以允許它利用Spring MVC定義的配置。如下所示:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.cors().and()...
	}
}

二、CORS全局配置使用

除了細(xì)粒度的、基于注釋的配置之外,我們還可以自定義一些全局CORS配置。類(lèi)似于使用過(guò)濾器,但可以在Spring MVC中聲明,并結(jié)合細(xì)粒度的@CrossOrigin配置。默認(rèn)情況下,所有的origin和GET、HEAD和POST方法都可以使用。

1.Java配置類(lèi)方式

使用非常簡(jiǎn)單,如下所示:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**");
	}
}

如果是使用的Spring Boot,建議只聲明一個(gè)WebMvcConfigurer bean,如下所示:

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

除此之外,我們還可以自定義更多的其他屬性,比如將CORS配置應(yīng)用于特定的路徑模式:

@Override
public void addCorsMappings(CorsRegistry registry) {
	registry.addMapping("/api/**")
		.allowedOrigins("http://domain2.com")
		.allowedMethods("PUT", "DELETE")
			.allowedHeaders("header1", "header2", "header3")
		.exposedHeaders("header1", "header2")
		.allowCredentials(false).maxAge(3600);
}

同樣,此處我們要注意Spring Security使用的情況,具體實(shí)現(xiàn)參考注解使用中的實(shí)現(xiàn)。

2.XML配置文件方式

當(dāng)然,我們也可以使用xml配置文件的方式來(lái)進(jìn)行全局配置,如下所示:

<mvc:cors>
	<mvc:mapping path="/**" />
</mvc:cors>

同樣也可以在xml中自定義CORS映射,如下所示:

<mvc:cors>

	<mvc:mapping path="/api/**"
		allowed-origins="http://domain1.com, http://domain2.com"
		allowed-methods="GET, PUT"
		allowed-headers="header1, header2, header3"
		exposed-headers="header1, header2" allow-credentials="false"
		max-age="123" />

	<mvc:mapping path="/resources/**"
		allowed-origins="http://domain1.com" />

</mvc:cors>

如果正在使用Spring Security,同樣要在Spring Security啟用CORS:

<http>
	<!-- Default to Spring MVC's CORS configuration -->
	<cors />
	...
</http>

三、原理解釋

CORS請(qǐng)求(包括帶有OPTIONS方法的飛行前請(qǐng)求)被自動(dòng)分派給已注冊(cè)的各種HandlerMappings。它們處理CORS預(yù)飛行請(qǐng)求,并通過(guò)CorsProcessor實(shí)現(xiàn)(默認(rèn)為DefaultCorsProcessor)攔截CORS簡(jiǎn)單和實(shí)際請(qǐng)求,以便添加相關(guān)的CORS響應(yīng)頭(如Access-Control-Allow-Origin)。CorsConfiguration允許您指定應(yīng)該如何處理CORS請(qǐng)求:allowed origins, headers, methods, etc等。

可以通過(guò)多種方式提供,如:

  • AbstractHandlerMapping#setCorsConfiguration()允許在路徑模式(如/api/)上指定多個(gè)CorsConfiguration映射的Map
  • 子類(lèi)可以通過(guò)重寫(xiě)AbstractHandlerMapping#getCorsConfiguration(Object, HttpServletRequest)方法來(lái)提供他們自己的CorsConfiguration
  • 處理程序可以實(shí)現(xiàn)CorsConfigurationSource接口(就像ResourceHttpRequestHandler現(xiàn)在做的那樣),以便為每個(gè)請(qǐng)求提供CorsConfiguration。

除此之外,還可以使用基于CORS的過(guò)濾器支持,作為上述其他方法的替代方案,Spring Framework還提供了CorsFilter。在這種情況下,不使用@CrossOrigin或WebMvcConfigurer# addcorsmapping (CorsRegistry),我們可以像下面這樣在Spring Boot中聲明過(guò)濾器:

@Configuration
public class MyConfiguration {

	@Bean
	public FilterRegistrationBean corsFilter() {
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		CorsConfiguration config = new CorsConfiguration();
		config.setAllowCredentials(true);
		config.addAllowedOrigin("http://domain1.com");
		config.addAllowedHeader("*");
		config.addAllowedMethod("*");
		source.registerCorsConfiguration("/**", config);
		FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
		bean.setOrder(0);
		return bean;
	}
}

以上內(nèi)容參考自Spring官方文檔:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
同時(shí)歡迎各位來(lái)我的個(gè)人博客:http://bravegougou.cn/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712616.html

到了這里,關(guān)于Spring CORS 跨域使用與原理(@CrossOrigin注解,Java配置類(lèi)方式,xml方式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 快速解決Spring Boot跨域困擾:使用CORS實(shí)現(xiàn)無(wú)縫跨域支持

    什么是跨域? 跨域(Cross-Origin Issue)的存在是因?yàn)闉g覽器的安全限制,它防止惡意網(wǎng)站利用跨域請(qǐng)求來(lái)獲取用戶的敏感信息或執(zhí)行惡意操作。瀏覽器通過(guò)實(shí)施同源策略來(lái)限制網(wǎng)頁(yè)在不同源之間進(jìn)行資源訪問(wèn)或交互的情況。當(dāng)一個(gè)網(wǎng)頁(yè)的協(xié)議、域名、或端口與當(dāng)前頁(yè)面的協(xié)議、

    2024年02月12日
    瀏覽(82)
  • Nginx使用“邏輯與”配置origin限制,修復(fù)CORS跨域漏洞

    漏洞名稱: CORS 跨域 漏洞等級(jí): 中危 漏洞證明: Origin從任何域名都可成功訪問(wèn),未做任何限制。 漏洞危害: 因?yàn)橥床呗缘拇嬖?,不同源的客戶端腳本不能訪問(wèn)目標(biāo)站點(diǎn)的資源,如果目標(biāo)站點(diǎn)并配置不當(dāng),沒(méi)有對(duì)請(qǐng)求源的域做嚴(yán)格限制,導(dǎo)致任意源都可以訪問(wèn)時(shí),就能在

    2023年04月09日
    瀏覽(19)
  • 本地HTML訪問(wèn)后端獲取數(shù)據(jù)使用@CrossOrigin仍出現(xiàn)跨域問(wèn)題

    本地HTML訪問(wèn)后端獲取數(shù)據(jù)使用@CrossOrigin仍出現(xiàn)跨域問(wèn)題

    Access-Control-Allow-Credentials 這個(gè)頭的作用,果然藥到病除。這個(gè)是服務(wù)端下發(fā)到客戶端的 response 中頭部字段,意義是允許客戶端攜帶驗(yàn)證信息,例如 cookie 之類(lèi)的。這樣客戶端在發(fā)起跨域請(qǐng)求的時(shí)候,不就可以攜帶允許的頭,還可以攜帶驗(yàn)證信息的頭,又由于客戶端是請(qǐng)求框架

    2024年02月13日
    瀏覽(32)
  • Spring Boot中解決跨域問(wèn)題(CORS)

    Spring Boot中解決跨域問(wèn)題(CORS)

    首先解釋什么是跨域,跨域就是前端和后端的端口號(hào)不同;會(huì)產(chǎn)生跨域問(wèn)題,這里瀏覽器的保護(hù)機(jī)制(同源策略)。 同源策略:前端和后端的協(xié)議、域名、端口號(hào)三者都相同叫做同源。 我們看一下不同源: VUE:http://localhost:8080 Spring: http://localhost:8081/list 當(dāng)我們出現(xiàn)跨域問(wèn)題

    2024年02月06日
    瀏覽(88)
  • Asp .Net Core 系列: 集成 CORS跨域配置

    Asp .Net Core 系列: 集成 CORS跨域配置

    CORS,全稱是“跨源資源共享”(Cross-Origin Resource Sharing),是一種Web應(yīng)用程序的安全機(jī)制,用于控制不同源的資源之間的交互。 在Web應(yīng)用程序中,CORS定義了一種機(jī)制,通過(guò)該機(jī)制,瀏覽器能夠限制哪些外部網(wǎng)頁(yè)可以訪問(wèn)來(lái)自不同源的資源。源由協(xié)議、域名和端口組成。當(dāng)一

    2024年01月24日
    瀏覽(114)
  • SpringBoot 配置CORS處理前后端分離跨域配置無(wú)效問(wèn)題解析

    瀏覽器有跨域限制,非同源策略(協(xié)議、主機(jī)名或端口不同)被視為跨域請(qǐng)求,解決跨域有跨域資源共享( CORS )、反向代理和 JSONP 的方式。本篇通過(guò) SpringBoot 的資源共享配置(CORS)來(lái)解決前后端分離項(xiàng)目的跨域,以及從原理上去解決跨域配置不生效的問(wèn)題。 使用前后端分離開(kāi)源項(xiàng)

    2023年04月23日
    瀏覽(45)
  • 跨域問(wèn)題(@CrossOrigin和Proxy)

    1??跨域問(wèn)題 在Web開(kāi)發(fā)中,如果前端頁(yè)面和后端接口不在同一個(gè)域名下,就會(huì)發(fā)生跨域請(qǐng)求的問(wèn)題。同源策略是瀏覽器的一種安全策略,它限制了來(lái)自不同源的客戶端腳本在瀏覽器中運(yùn)行時(shí)的交互。同源指的是協(xié)議、域名、端口都相同。如果客戶端腳本試圖通過(guò)XMLHttpReques

    2024年02月11日
    瀏覽(18)
  • 后端通過(guò)CorsRegistry對(duì)象配置了全局跨域,但是前端仍然報(bào)CORS跨域錯(cuò)誤

    后端通過(guò)CorsRegistry對(duì)象配置了全局跨域,但是前端仍然報(bào)CORS跨域錯(cuò)誤

    問(wèn)題背景 在實(shí)現(xiàn)登錄功能時(shí),我先是通過(guò)CorsRegistry配置了全局跨域,然后配置了一個(gè)登錄攔截器后前端就報(bào)錯(cuò) CORS 跨域錯(cuò)誤 問(wèn)題原因 前置知識(shí) 首先我們來(lái)了解一下什么是跨域錯(cuò)誤, 跨域錯(cuò)誤 (Cross-Origin Error)是在Web開(kāi)發(fā)中常見(jiàn)的錯(cuò)誤之一,它發(fā)生在瀏覽器執(zhí)行跨源請(qǐng)求(

    2024年02月07日
    瀏覽(21)
  • 解決Spring Boot跨域問(wèn)題(配置JAVA類(lèi))

    解決Spring Boot跨域問(wèn)題(配置JAVA類(lèi))

    跨域問(wèn)題指的是不同端口之間,使用 ajax 無(wú)法相互調(diào)用的問(wèn)題??缬騿?wèn)題本質(zhì)是瀏覽器的一種保護(hù)機(jī)制,它是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù)。 比如前端用的端口號(hào)為8081,后端用的端口號(hào)為8080,后端想接收前端發(fā)送的數(shù)據(jù)就會(huì)出現(xiàn)跨域問(wèn)題。 如圖所示: 這里

    2024年01月17日
    瀏覽(93)
  • nginx設(shè)置add_header失效 配置cors跨域失效無(wú)效的解決方案

    nginx設(shè)置add_header失效 配置cors跨域失效無(wú)效的解決方案

    希望對(duì)大家有幫助,有用的話記得點(diǎn)個(gè)贊評(píng)個(gè)論,讓俺知道這個(gè)法子可以幫助到大家喲?。m然我這個(gè)法子很野) 最近在完成一個(gè)項(xiàng)目,后端API地址和前端地址不一致,這就涉及到了跨域的問(wèn)題。 由于服務(wù)端加了一層Nginx作為反代,所以很自然的想到要去 .conf 配置文件中 加

    2024年02月12日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包