SpringBoot跨域的案例分析-創(chuàng)新互聯(lián)

小編給大家分享一下SpringBoot跨域的案例分析,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供招遠企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、做網(wǎng)站H5場景定制、小程序制作等業(yè)務(wù)。10年已為招遠眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。

前言:公司的SpringBoot項目出于某種原因,經(jīng)常樣處理一些跨域請求。

一。以前通過查閱相關(guān)資料自己寫的一個處理跨域的類,如下。

1.1首先定義一個filter(攔截所有請求,包括跨域請求)

public class CrossDomainFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {     
        HttpServletRequest hreq = (HttpServletRequest) request;  //
        HttpServletResponse hresp = (HttpServletResponse) response; 
        //跨域
        hresp.setHeader("Access-Control-Allow-Origin", "*");  //設(shè)置相應(yīng)頭
        //跨域 Header
        hresp.setHeader("Access-Control-Allow-Methods", "*");
        hresp.setHeader("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,x-requested-with,requesttype");
        //header('Access-Control-Allow-Headers:x-requested-with,content-type,requesttype');
        // 瀏覽器是會先發(fā)一次options請求,如果請求通過,則繼續(xù)發(fā)送正式的post請求
        // 配置options的請求返回
        if (hreq.getMethod().equals("OPTIONS")) {  //如果發(fā)現(xiàn)該請求為OPTION,則直接返回(不需要進入系統(tǒng)),并且設(shè)置相應(yīng)信息
            hresp.setStatus(200);
            // hresp.setContentLength(0);
            hresp.getWriter().write("OPTIONS returns OK");
            return;
        }
        // Filter 只是鏈?zhǔn)教幚恚埱笠廊晦D(zhuǎn)發(fā)到目的地址。
        chain.doFilter(request, response);
    }
}

1.2  注冊一個配置類(Configuration),把上面定義的filter類注冊到上下文環(huán)境中

@Configuration
public class WebConfiguration {
    @Bean
    public RemoteIpFilter remoteIpFilter() {
        return new RemoteIpFilter();
    }
    @Bean
    public FilterRegistrationBean<CrossDomainFilter> testFilterRegistration() {
        FilterRegistrationBean<CrossDomainFilter> registration = new FilterRegistrationBean<CrossDomainFilter>();
        registration.setFilter(new CrossDomainFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("MyFilter");
        registration.setOrder(1);
        return registration;
    }
}

備注:這個配置類主要解決我們編寫的filter(CrossDomainFilter )攔截那些請求

二. SpringBoot自己的解決跨域的Filter(CorsFilter) ,該filter的源碼很簡單,可直接查看還類的doFilterInternal() 方法,因為該發(fā)法在doFilter()方法中會調(diào)用(可以理解就是Filter的doFilter()方法)。

處理過程也是接受到OPTION方法并相應(yīng)200并返回。

@Configuration
@EnableAutoConfiguration
public class CrossOriginconfig {
    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        // 設(shè)置你要允許的網(wǎng)站域名,如果全允許則設(shè)為 *
        corsConfiguration.addAllowedOrigin("*");
        // 如果要限制 HEADER 或 METHOD 請自行更改
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        System.out.println("confi init");
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}

三:個人對跨域問題的小結(jié)

瀏覽器在發(fā)送請求之前,最先檢測到跨域問題,并在發(fā)送跨域請求之前先發(fā)送了一個類型為OPTIONS的請求(請求地址不變,并且請求頭上攜帶了一些其他信息),該請求必須得到服務(wù)器響應(yīng)(請查CrossDomainFilter ),如果該請求沒有得到響應(yīng),則瀏覽器不會發(fā)送真正的請求了。

3.1 :瀏覽器發(fā)送的OPTION請求(試探性的請求)

SpringBoot跨域的案例分析SpringBoot跨域的案例分析

備注: 有圖我們發(fā)現(xiàn)請求地址不變(),請求方法為OPTION,并且請求頭中攜帶了一些信息該信息可以表明我是一個跨域請求,并且請求的方式是POST。。

3.2 :服務(wù)器需要對該請求做出相應(yīng),(請查CrossDomainFilter )

1)首先設(shè)置相應(yīng)相應(yīng)頭(告訴瀏覽器我支持的跨域請求的一些信息)

2) 設(shè)置相應(yīng)狀態(tài)為200,并且返回數(shù)據(jù)(任意數(shù)據(jù))

3.3 :瀏覽器獲得到了OPTION請求的相應(yīng)(服務(wù)器接受跨域),故放心發(fā)送真正的請求,如下

SpringBoot跨域的案例分析

1)對比OPTION請求,請求地址沒變^_^

2)對比請求方式該請求為POST.  并且POST請求在OPTIN中已經(jīng)告訴服務(wù)器了(Access-Control-Request-Method)。

3)對比OPTION請求的頭,該請求并沒有Access-Control-Allow-****的相關(guān)參數(shù)。

看完了這篇文章,相信你對SpringBoot跨域的案例分析有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

名稱欄目:SpringBoot跨域的案例分析-創(chuàng)新互聯(lián)
文章起源:http://m.kartarina.com/article8/ccgdip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)品牌網(wǎng)站制作手機網(wǎng)站建設(shè)做網(wǎng)站網(wǎng)站排名標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
主站蜘蛛池模板: 久久久久亚洲精品无码蜜桃| 无码人妻精品一区二区三区66 | 一级毛片中出无码| 一本大道久久东京热无码AV| 伊人久久无码中文字幕| 一本天堂ⅴ无码亚洲道久久 | 18禁无遮拦无码国产在线播放| 亚洲中文字幕久久精品无码VA| 国产日韩AV免费无码一区二区| 99久久人妻无码精品系列| 人妻AV中出无码内射| 成人无码区免费视频观看| 日木av无码专区亚洲av毛片| 无码任你躁久久久久久久 | 东京热HEYZO无码专区| 午夜不卡无码中文字幕影院| 亚洲中文字幕无码爆乳av中文| 精品无码久久久久国产| 国产成人无码精品久久久久免费| 麻豆AV无码精品一区二区| 国产精品亚洲а∨无码播放| 精品人妻少妇嫩草AV无码专区 | 精品日韩亚洲AV无码| 亚洲AV无码精品色午夜在线观看 | 亚洲人成国产精品无码| 色欲AV永久无码精品无码| 亚洲综合无码无在线观看| 久久无码高潮喷水| 99热门精品一区二区三区无码| 人妻aⅴ无码一区二区三区| 无码精品人妻一区二区三区中| 中文一国产一无码一日韩| 久久久久亚洲AV无码专区桃色| 无码综合天天久久综合网| 无码一区二区三区免费视频| 亚洲大尺度无码无码专线一区| 一本天堂ⅴ无码亚洲道久久| 无码日韩人妻av一区免费| av中文无码乱人伦在线观看| 无码熟熟妇丰满人妻啪啪软件| 免费无码国产V片在线观看|