最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot跨域處理的多種方式小結(jié)

 更新時(shí)間:2023年11月21日 15:33:11   作者:編程界小明哥  
當(dāng)一臺(tái)服務(wù)器資源從另一臺(tái)服務(wù)器(不同 的域名或者端口)請(qǐng)求一個(gè)資源或者接口,就會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求,這篇文章主要介紹了Springboot跨域處理的多種方式小結(jié),需要的朋友可以參考下

測(cè)試工具 IDEA

什么是跨域

當(dāng)一臺(tái)服務(wù)器資源從另一臺(tái)服務(wù)器(不同 的域名或者端口)請(qǐng)求一個(gè)資源或者接口,就會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求。

瀏覽器出于安全考慮,會(huì)限制跨域訪問(wèn),就是不允許跨域請(qǐng)求資源,要求協(xié)議,IP和端口必須都相同,其中有一個(gè)不同就會(huì)產(chǎn)生跨域問(wèn)題,這就是同源策略。

跨域舉例

請(qǐng)求方響應(yīng)方是否跨域原因
http://www.ming.comhttp://www.ming.com/test.html協(xié)議、域名、端口相同
http://www.ming.comhttps://www.ming.com/test.html協(xié)議不同
http://www.ming.comhttp://www.minggod.com/test.html主域名不同
http://www.ming.comhttp://haha.ming.com/test.html主域名相同、子域名不同
http://www.ming.com:8080http://www.ming.com:8090/test.html端口不同

跨域訪問(wèn)實(shí)例

后端測(cè)試代碼

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CorsController {
    @GetMapping("/cors")
    public  String hello(){
        return "hello cors";
    }
}

用瀏覽器打開(kāi),我這里配置的端口是8090

在這里插入圖片描述

在前端項(xiàng)目中用axios訪問(wèn)時(shí)

<template>
    <span>跨域請(qǐng)求:{{result}}</span>
</template>
<script>
    import axios from 'axios';
    export default {
        name: "Cors",
        data(){
          return {
              result:""
          }
        },
        methods:{
            getTest(){
                axios.get("http://localhost:8090/cors").then(res=>{
                    console.log(res.data)
                    this.result=res.data
                })
            }
        },
        created() {
            this.getTest();
        }
    }
</script>
<style scoped>
</style>

在這里插入圖片描述

報(bào)錯(cuò)中的關(guān)鍵詞
Access-Control-Allow-Origin

跨域處理(后端)

說(shuō)明:
這里是針對(duì)Springboot 2.4.0以后的寫(xiě)法,之前的版本寫(xiě)法是.allowedOrigins(*)
2.4.0之后會(huì)報(bào)錯(cuò)替換成.allowedOriginPatterns即可
代碼中會(huì)有注釋說(shuō)明

1.添加跨域配置類

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOriginPattern("*");//2.4.0后的寫(xiě)法
       // config.addAllowedOrigin("*");
        //是否發(fā)送 Cookie
        config.setAllowCredentials(true);
        //放行哪些請(qǐng)求方式
        config.addAllowedMethod("*");
        //放行哪些原始請(qǐng)求頭部信息
        config.addAllowedHeader("*");
        //暴露哪些頭部信息
        config.addExposedHeader("*");
        //2. 添加映射路徑
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);
    }
}

重啟后端服務(wù)后,刷新前端頁(yè)面正常訪問(wèn),效果如下

在這里插入圖片描述

2. 重寫(xiě)WebMvcConfigurer

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否發(fā)送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                //.allowedOrigins("*")
                .allowedOriginPatterns("*")//2.4.0后的寫(xiě)法
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

在這里插入圖片描述

3. 注解 @CrossOrigin

類上注解

@RestController
@CrossOrigin("*")
public class CorsController {
    @GetMapping("/cors")
    public  String hello(){
        return "hello cors";
    }
}

方法上注解
方法可以單獨(dú)跨域,沒(méi)有 @CrossOrigin(“*”) 注解的方法則不行

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CorsController {
    @GetMapping("/cors")
    @CrossOrigin("*")
    public  String hello(){
        return "hello cors";
    }
    @GetMapping("/cors1")
    public  String hello1(){
        return "hello cors1";
    }
}

4.自定義過(guò)濾器

可以正常跨域

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.HttpServletRequest;
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;
        HttpServletRequest httpServletRequest = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", httpServletRequest.getHeader("origin"));
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        chain.doFilter(req, res);
    }
    public void init(FilterConfig filterConfig) {}
    public void destroy() {}
}

5.手動(dòng)設(shè)置響應(yīng)頭(局部跨域)

此方案聽(tīng)說(shuō)可以用,但明哥自己測(cè)試了,不能用,依然有問(wèn)題,不建議!

@GetMapping("/cors1")
public  String hello1(HttpServletResponse response){
    response.addHeader("Access-Allow-Control-Origin","*");
    return "hello cors1";
}

小結(jié)

這節(jié)總結(jié)了“ Springboot跨域處理 ”,希望能對(duì)大家有所幫助。

到此這篇關(guān)于Springboot跨域處理的幾種方式的文章就介紹到這了,更多相關(guān)Springboot跨域處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的示例詳解

    SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的示例詳解

    Springboot國(guó)際化可以幫助使用者在不同語(yǔ)言環(huán)境中構(gòu)建應(yīng)用程序,這樣應(yīng)用程序可以有效地適應(yīng)不同語(yǔ)言文化背景下的用戶需求。本文主要介紹了SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的方法,需要的可以參考一下
    2023-02-02
  • 創(chuàng)建java多線程程序

    創(chuàng)建java多線程程序

    Java 給多線程編程提供了內(nèi)置的支持。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。希望本篇文章能夠給你帶來(lái)幫助
    2021-06-06
  • 解析SpringCloud簡(jiǎn)介與微服務(wù)架構(gòu)

    解析SpringCloud簡(jiǎn)介與微服務(wù)架構(gòu)

    這篇文章主要介紹了SpringCloud簡(jiǎn)介與微服務(wù)架構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SpringMVC RESTful支持實(shí)現(xiàn)過(guò)程演示

    SpringMVC RESTful支持實(shí)現(xiàn)過(guò)程演示

    這篇文章主要介紹了SpringMVC RESTful支持實(shí)現(xiàn)過(guò)程演示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例

    Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例,解釋一下,就是指根據(jù)傳入的表名,動(dòng)態(tài)地創(chuàng)建數(shù)據(jù)庫(kù)表,以供后面的業(yè)務(wù)場(chǎng)景使用,
    而使用 Mybatis 的動(dòng)態(tài) SQL,就能很好地為我們解決這個(gè)問(wèn)題,需要的朋友可以參考下
    2023-10-10
  • MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    這篇文章主要介紹了MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java如何遠(yuǎn)程調(diào)用對(duì)方接口

    Java如何遠(yuǎn)程調(diào)用對(duì)方接口

    這篇文章主要介紹了Java如何遠(yuǎn)程調(diào)用對(duì)方接口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 使用Java快速搭一個(gè)可用的Agent的完整實(shí)例

    使用Java快速搭一個(gè)可用的Agent的完整實(shí)例

    很多人第一次接觸Agent框架,容易把它理解成更復(fù)雜一點(diǎn)的模型SDK,但真正進(jìn)入業(yè)務(wù)場(chǎng)景后,你會(huì)發(fā)現(xiàn)問(wèn)題根本不在怎么調(diào)模型,而在怎么讓模型穩(wěn)定地參與業(yè)務(wù)流程,這篇文章從Java開(kāi)發(fā)者視角出發(fā),介紹AgentScope是什么、適合解決什么問(wèn)題,需要的朋友可以參考下
    2026-03-03
  • Java的微信開(kāi)發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    Java的微信開(kāi)發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    這篇文章主要介紹了Java微信開(kāi)發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例,注意一下json-lib所需要的jar包,需要的朋友可以參考下
    2016-02-02
  • MyBatis insert標(biāo)簽及常用屬性詳解

    MyBatis insert標(biāo)簽及常用屬性詳解

    這篇文章主要介紹了MyBatis insert標(biāo)簽,insert 標(biāo)簽中沒(méi)有 resultType 屬性,只有查詢操作才需要對(duì)返回結(jié)果類型進(jìn)行相應(yīng)的指定,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

徐州市| 南岸区| 师宗县| 乌鲁木齐市| 灵丘县| 和平区| 图木舒克市| 宁化县| 湘潭县| 蓝田县| 资中县| 南康市| 逊克县| 双柏县| 滨州市| 绩溪县| 镇宁| 黑水县| 杭州市| 桃园县| 吴桥县| 麟游县| 丹阳市| 衡阳市| 军事| 咸阳市| 红桥区| 莆田市| 驻马店市| 应用必备| 马尔康县| 卢龙县| 青阳县| 泸西县| 新郑市| 平昌县| 昌宁县| 安塞县| 慈溪市| 闻喜县| 西林县|