欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot后端解決跨域問題的3種方案分享

 更新時(shí)間:2023年07月12日 16:22:51   作者:Leon_coding  
這篇文章主要給大家分享介紹了關(guān)于SpringBoot后端解決跨域問題的3種方案,跨域指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制,需要的朋友可以參考下

1.跨域的介紹

跨源資源共享(CORS——Cross-Origin Resource Sharing,跨源資源共享,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機(jī)制,該機(jī)制通過允許服務(wù)器標(biāo)示除了它自己以外的其它源(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源??缭促Y源共享還通過一種機(jī)制來檢查服務(wù)器是否會允許要發(fā)送的真實(shí)請求,該機(jī)制通過瀏覽器發(fā)起一個(gè)到服務(wù)器托管的跨源資源的“預(yù)檢”請求。在預(yù)檢中,瀏覽器發(fā)送的頭中標(biāo)示有 HTTP 方法和真實(shí)請求中會用到的頭。

2.跨域產(chǎn)生原因

跨域問題所產(chǎn)生的原因是瀏覽器的“同源策略”所導(dǎo)致的。什么是同源策略呢,就是瀏覽器規(guī)定了,我當(dāng)前頁面和請求頁面的 1網(wǎng)絡(luò)協(xié)議、2主機(jī)域名、3端口,這三部分必須保證一模一樣才行。如下圖:

這也主要是瀏覽器為了保證用戶上網(wǎng)的基本安全需求而設(shè)置的。

1.為了防止惡意網(wǎng)頁可以獲取其他網(wǎng)站的本地?cái)?shù)據(jù)。

2.為了防止惡意網(wǎng)站iframe其他網(wǎng)站的時(shí)候,獲取數(shù)據(jù)。

3.為了防止惡意網(wǎng)站在自已網(wǎng)站有訪問其他網(wǎng)站的權(quán)利,以免通過cookie免登,拿到數(shù)據(jù)。

3.跨域的解決方案

跨域的解決方案有很多種,前后端都有。這里主要介紹下我所知道的三種方案,并配以代碼展示。

1.在后端被訪問代碼的方法上加注解@CrossOrign。這個(gè)注解是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;
    }

但是,后端有很多被訪問的方法,我們不能在每個(gè)方法上面都加上這個(gè)注解,代碼冗余。所以就有了第二種方法,我們可以添加一個(gè)過濾器,來解決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);
    }
}

還有一種解決方法,我們可以通過實(shí)現(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é)

到此這篇關(guān)于SpringBoot后端解決跨域問題的3種方案的文章就介紹到這了,更多相關(guān)后端跨域問題解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud之@FeignClient()注解的使用詳解

    SpringCloud之@FeignClient()注解的使用詳解

    @FeignClient是SpringCloud中用于聲明一個(gè)Feign客戶端的注解,用于解決模塊方法互相調(diào)用的問題,Feign是一個(gè)聲明式的WebService客戶端,通過Feign,只需要?jiǎng)?chuàng)建一個(gè)接口,并使用注解來描述請求,就可以直接執(zhí)行HTTP請求了
    2024-11-11
  • MyBatis?超詳細(xì)講解動(dòng)態(tài)SQL的實(shí)現(xiàn)

    MyBatis?超詳細(xì)講解動(dòng)態(tài)SQL的實(shí)現(xiàn)

    動(dòng)態(tài)?SQL?是?MyBatis?的強(qiáng)大特性之一。如果你使用過?JDBC?或其它類似的框架,你應(yīng)該能理解根據(jù)不同條件拼接?SQL?語句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號。利用動(dòng)態(tài)?SQL,可以徹底擺脫這種痛苦
    2022-03-03
  • Spring如何使用三級緩存解決循環(huán)依賴

    Spring如何使用三級緩存解決循環(huán)依賴

    在Spring框架中,循環(huán)依賴是指兩個(gè)或多個(gè)Bean相互依賴,形成閉環(huán),導(dǎo)致無法完成初始化,此問題僅存在于單例Bean中,而原型Bean會拋出異常,Spring通過三級緩存及提前暴露策略解決循環(huán)依賴:一級緩存存放完全初始化的Bean
    2024-11-11
  • 淺談SpringCloud的微服務(wù)架構(gòu)組件

    淺談SpringCloud的微服務(wù)架構(gòu)組件

    這篇文章主要介紹了淺談SpringCloud的微服務(wù)架構(gòu)組件,Spring Cloud根據(jù)分布式服務(wù)協(xié)調(diào)治理的需求成立了許多子項(xiàng)目,每個(gè)項(xiàng)目通過特定的組件去實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • Java中2個(gè)Integer比較相同的四種方式舉例

    Java中2個(gè)Integer比較相同的四種方式舉例

    這篇文章主要介紹了Java中比較兩個(gè)Integer對象的四種方式,并解釋了每種方式的原理和適用范圍,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • SpringBoot和Vue項(xiàng)目服務(wù)器發(fā)布流程分享

    SpringBoot和Vue項(xiàng)目服務(wù)器發(fā)布流程分享

    本文詳細(xì)介紹了如何將SpringBoot和Vue項(xiàng)目發(fā)布到阿里云ECS服務(wù)器上的步驟,包括準(zhǔn)備服務(wù)器、安裝寶塔、配置數(shù)據(jù)庫、打包項(xiàng)目、上傳文件、設(shè)置端口、安裝軟件和注冊網(wǎng)站等
    2025-02-02
  • RocketMQ之Consumer整體介紹啟動(dòng)源碼分析

    RocketMQ之Consumer整體介紹啟動(dòng)源碼分析

    這篇文章主要為大家介紹了RocketMQ源碼分析之Consumer整體介紹啟動(dòng)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Spring Boot應(yīng)用開發(fā)初探與實(shí)例講解

    Spring Boot應(yīng)用開發(fā)初探與實(shí)例講解

    這篇文章主要介紹了Spring Boot應(yīng)用開發(fā)初探與實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Jmeter調(diào)用java腳本過程詳解

    Jmeter調(diào)用java腳本過程詳解

    這篇文章主要介紹了Jmeter調(diào)用java腳本過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot中的聲明式事務(wù)詳解

    SpringBoot中的聲明式事務(wù)詳解

    這篇文章主要介紹了SpringBoot中的聲明式事務(wù)詳解,Spring采用統(tǒng)一的機(jī)制來處理不同的數(shù)據(jù)訪問技術(shù)的事務(wù), Spring的事務(wù)提供一個(gè)PlatformTransactionManager的接口,不同的數(shù)據(jù)訪問技術(shù)使用不同的接口實(shí)現(xiàn),需要的朋友可以參考下
    2023-08-08

最新評論