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

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

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

測試工具 IDEA

什么是跨域

當一臺服務(wù)器資源從另一臺服務(wù)器(不同 的域名或者端口)請求一個資源或者接口,就會發(fā)起一個跨域 HTTP 請求。

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

跨域舉例

請求方響應(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端口不同

跨域訪問實例

后端測試代碼

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";
    }
}

用瀏覽器打開,我這里配置的端口是8090

在這里插入圖片描述

在前端項目中用axios訪問時

<template>
    <span>跨域請求:{{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>

在這里插入圖片描述

報錯中的關(guān)鍵詞
Access-Control-Allow-Origin

跨域處理(后端)

說明:
這里是針對Springboot 2.4.0以后的寫法,之前的版本寫法是.allowedOrigins(*)
2.4.0之后會報錯替換成.allowedOriginPatterns即可
代碼中會有注釋說明

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后的寫法
       // 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);
    }
}

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

在這里插入圖片描述

2. 重寫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后的寫法
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

在這里插入圖片描述

3. 注解 @CrossOrigin

類上注解

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

方法上注解
方法可以單獨跨域,沒有 @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.自定義過濾器

可以正??缬?/p>

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.手動設(shè)置響應(yīng)頭(局部跨域)

此方案聽說可以用,但明哥自己測試了,不能用,依然有問題,不建議!

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

小結(jié)

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

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

相關(guān)文章

  • 深入講解Java Maven配置

    深入講解Java Maven配置

    這篇文章主要介紹了Maven的安裝配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-10-10
  • pageHelper一對多分頁解決方案示例

    pageHelper一對多分頁解決方案示例

    這篇文章主要為大家介紹了pageHelper一對多分頁解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 使用idea創(chuàng)建web框架和配置struts的方法詳解

    使用idea創(chuàng)建web框架和配置struts的方法詳解

    這篇文章主要介紹了使用idea創(chuàng)建web框架和配置struts的方法,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn)

    SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn)

    本文主要介紹了SpringBoot基于Minio實現(xiàn)分片上傳、斷點續(xù)傳的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-08-08
  • Java?C++題解leetcode764最大加號標志示例

    Java?C++題解leetcode764最大加號標志示例

    這篇文章主要為大家介紹了Java?C++題解leetcode764最大加號標志示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Java使用定時器編寫一個簡單的搶紅包小游戲

    Java使用定時器編寫一個簡單的搶紅包小游戲

    這篇文章主要為大家介紹了Java如何使用定時器編寫一個簡單的搶紅包小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-07-07
  • Springboot實現(xiàn)ENC加密的詳細流程

    Springboot實現(xiàn)ENC加密的詳細流程

    在項目開發(fā)過程中,需要配置數(shù)據(jù)庫連接密碼、Redis密碼、網(wǎng)盤上傳的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心,這些信息如果泄露,還是會造成一定的困擾,下面這篇文章主要給大家介紹了關(guān)于Springboot實現(xiàn)ENC加密的詳細流程,需要的朋友可以參考下
    2023-06-06
  • Quarkus集成open api接口使用swagger ui展示

    Quarkus集成open api接口使用swagger ui展示

    這篇文章主要為大家介紹了Quarkus集成open?api接口使用swagger?ui的展示示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • SpringBoot項目導(dǎo)入aliyun oss starter依賴后啟動報錯問題

    SpringBoot項目導(dǎo)入aliyun oss starter依賴后啟動報錯問題

    這篇文章主要介紹了SpringBoot項目導(dǎo)入aliyun oss starter依賴后啟動報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot的pom.xml配置方式

    springboot的pom.xml配置方式

    這篇文章主要介紹了springboot的pom.xml配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論