<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • SpringBoot跨域的案例分析-創(chuàng)新互聯(lián)

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

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

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

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

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

            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');
                    // 瀏覽器是會(huì)先發(fā)一次options請(qǐng)求,如果請(qǐng)求通過(guò),則繼續(xù)發(fā)送正式的post請(qǐng)求
                    // 配置options的請(qǐng)求返回
                    if (hreq.getMethod().equals("OPTIONS")) {  //如果發(fā)現(xiàn)該請(qǐng)求為OPTION,則直接返回(不需要進(jìn)入系統(tǒng)),并且設(shè)置相應(yīng)信息
                        hresp.setStatus(200);
                        // hresp.setContentLength(0);
                        hresp.getWriter().write("OPTIONS returns OK");
                        return;
                    }
                    // Filter 只是鏈?zhǔn)教幚?,?qǐng)求依然轉(zhuǎn)發(fā)到目的地址。
                    chain.doFilter(request, response);
                }
            }

            1.2  注冊(cè)一個(gè)配置類(lèi)(Configuration),把上面定義的filter類(lèi)注冊(cè)到上下文環(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;
                }
            }

            備注:這個(gè)配置類(lèi)主要解決我們編寫(xiě)的filter(CrossDomainFilter )攔截那些請(qǐng)求

            二. SpringBoot自己的解決跨域的Filter(CorsFilter) ,該filter的源碼很簡(jiǎn)單,可直接查看還類(lèi)的doFilterInternal() 方法,因?yàn)樵摪l(fā)法在doFilter()方法中會(huì)調(diào)用(可以理解就是Filter的doFilter()方法)。

            處理過(guò)程也是接受到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 請(qǐng)自行更改
                    corsConfiguration.addAllowedHeader("*");
                    corsConfiguration.addAllowedMethod("*");
                    urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
                    System.out.println("confi init");
                    return new CorsFilter(urlBasedCorsConfigurationSource);
                }
            }

            三:個(gè)人對(duì)跨域問(wèn)題的小結(jié)

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

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

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

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

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

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

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

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

            SpringBoot跨域的案例分析

            1)對(duì)比OPTION請(qǐng)求,請(qǐng)求地址沒(méi)變^_^

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

            3)對(duì)比OPTION請(qǐng)求的頭,該請(qǐng)求并沒(méi)有Access-Control-Allow-****的相關(guān)參數(shù)。

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

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

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

            廣告

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

            h5響應(yīng)式網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 人人看人人插摸 | 久久色视频在线观看 | 青春草视频免费观看 | 男女成人 免费视频在线播放 | 美女操逼网站AV线 |