SpringBoot后端解決跨域問題的3種方案分享
1.跨域的介紹
跨源資源共享(CORS——Cross-Origin Resource Sharing,跨源資源共享,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機制,該機制通過允許服務器標示除了它自己以外的其它源(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源。跨源資源共享還通過一種機制來檢查服務器是否會允許要發(fā)送的真實請求,該機制通過瀏覽器發(fā)起一個到服務器托管的跨源資源的“預檢”請求。在預檢中,瀏覽器發(fā)送的頭中標示有 HTTP 方法和真實請求中會用到的頭。
2.跨域產(chǎn)生原因
跨域問題所產(chǎn)生的原因是瀏覽器的“同源策略”所導致的。什么是同源策略呢,就是瀏覽器規(guī)定了,我當前頁面和請求頁面的 1網(wǎng)絡協(xié)議、2主機域名、3端口,這三部分必須保證一模一樣才行。如下圖:

這也主要是瀏覽器為了保證用戶上網(wǎng)的基本安全需求而設置的。
1.為了防止惡意網(wǎng)頁可以獲取其他網(wǎng)站的本地數(shù)據(jù)。
2.為了防止惡意網(wǎng)站iframe其他網(wǎng)站的時候,獲取數(shù)據(jù)。
3.為了防止惡意網(wǎng)站在自已網(wǎng)站有訪問其他網(wǎng)站的權(quán)利,以免通過cookie免登,拿到數(shù)據(jù)。
3.跨域的解決方案
跨域的解決方案有很多種,前后端都有。這里主要介紹下我所知道的三種方案,并配以代碼展示。
1.在后端被訪問代碼的方法上加注解@CrossOrign。這個注解是spring-web中的注解,我們只需在方法上面加注之后,就會解決CORS問題。例如:
/**
* 獲取用戶信息
*
* @return 用戶信息
*/
@GetMapping("getInfo")
@CrossOrigin
public AjaxResult getInfo()
{
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 權(quán)限集合
Set<String> permissions = permissionService.getMenuPermission(user);
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
return ajax;
}但是,后端有很多被訪問的方法,我們不能在每個方法上面都加上這個注解,代碼冗余。所以就有了第二種方法,我們可以添加一個過濾器,來解決CORS問題,代碼如下:
@Configuration
public class CORSFilter {
@Bean
public CorsFilter corsFilter(){
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsFilter(source);
}
}還有一種解決方法,我們可以通過實現(xiàn)接口并重寫方法來解決跨域問題,代碼如下:
@Configuration
public class CORSConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET","POST","PUT","HEAD")
.allowCredentials(true)
.allowedHeaders("*")
.maxAge(3600);
}
}通過這三種方式,我們就可以解決CORS跨域問題。
總結(jié)
到此這篇關于SpringBoot后端解決跨域問題的3種方案的文章就介紹到這了,更多相關后端跨域問題解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud之@FeignClient()注解的使用詳解
@FeignClient是SpringCloud中用于聲明一個Feign客戶端的注解,用于解決模塊方法互相調(diào)用的問題,Feign是一個聲明式的WebService客戶端,通過Feign,只需要創(chuàng)建一個接口,并使用注解來描述請求,就可以直接執(zhí)行HTTP請求了2024-11-11
MyBatis?超詳細講解動態(tài)SQL的實現(xiàn)
動態(tài)?SQL?是?MyBatis?的強大特性之一。如果你使用過?JDBC?或其它類似的框架,你應該能理解根據(jù)不同條件拼接?SQL?語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態(tài)?SQL,可以徹底擺脫這種痛苦2022-03-03

