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

Spring?MVC跨域問題及解決

 更新時間:2025年03月12日 16:31:01   作者:`moon`曉龍  
這篇文章主要介紹了Spring?MVC跨域問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

跨域問題

不同的域

協(xié)議、域名、端口,三者只要有一個不同,就叫不同的域

比如

http:/moon.com/test去拉取下列url對應(yīng)的資源

URL是否跨域
http:/moon.com/test不算跨域
http:/www.moon.com/test算跨域
https:/moon.com/test算跨域

Tips:

  • 不同的域?qū)?strong>協(xié)議、域名、端口三者的檢查是非常嚴格的,比如從http://localhost:8080/test去拉取http://127.0.0.1:8080/test2算跨域的,因為域名不一樣,雖然他們表達的意思一樣。

同源策略

瀏覽器自身會組織從一個域加載的腳本獲取另外一個域的資源

Tips:

  • 對于css和js這樣的資源是不會觸發(fā)同源策略

解決方法

1.CORS

跨域資源共享,因為它支持所有類型的HTTP請求

Tips:

  • 只能解決瀏覽器跨域問題,如果涉及到App,小程序,物聯(lián)網(wǎng)設(shè)備跨域,SpringMVC這一套不一定生效

2.JSONP

前端可以通過JSONP來進行獲取跨域資源,但是只支持GET請求

3.局部解決方案

@CrossOrigin

在方法或者類上加上@CrossOrigin這個注解,設(shè)置響應(yīng)頭中允許的跨域訪問的請求域,*代表所有,也可以通過字符串?dāng)?shù)組的形式進行逐一放行

@CrossOrigin({"http://localhost:8081", "http://localhost:8082"})
@GetMapping("/request")
public Student rest1(HttpServletResponse response) {
  Student student = new Student();
  student.setName("GET曉龍");
  student.setAge(23);
  student.setBirthday(new Date());
  return student;
}

Tips:

  • 注解中的maxAge屬性表示預(yù)檢請求結(jié)果緩存的最大時長,單位為秒,默認為1800s,即30分鐘

4.全局解決方法

對于瀏覽器的跨域問題,其實有很多的解決方案,其本質(zhì)就是設(shè)置響應(yīng)頭中的內(nèi)容Access-Control-Allow-Origin的值,他的值其實就是我們上面允許訪問的域,對此我們只需要配置響應(yīng)的響應(yīng)頭,所以我們可以通過過濾器去設(shè)置響應(yīng)頭,貨值配置Spring幫我們寫好的過濾

手寫過濾器

我們寫一個類是實現(xiàn)Filter接口,因為在Filter接口中,初始化和銷毀方法是默認實現(xiàn),我們這里也不需要,所以沒有進行重寫。

public class CrossOriginFilter implements Filter {
  
  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    // 轉(zhuǎn)化響應(yīng)
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    // 設(shè)置響應(yīng)頭,設(shè)置允許訪問為全部
    response.setHeader("Access-Control-Allow-Origin", "*");
    // 放行
    filterChain.doFilter(servletRequest, response);
  }
}

Tips:

  • 過濾器寫好以后,我們把它配置到項目中即可,可以使用web.xml或者java類的方式配置,具體方式可以參考之前的配置過濾器

配置Spring配置文件

在多數(shù)的情況下,我們是不需要去手寫過濾器,Spring已經(jīng)幫我們做好了,而且功能也比我們的完善,我們可以直接拿過來用

<!--配置mvc的跨域訪問-->
<mvc:cors>
  <!--
    映射中對應(yīng)的就是我們的請求url,配置哪一條允許跨域訪問
    allowed-origins  =>允許訪問的請求
    allowed-methods  =>允許訪問的方式
    max-age          =>預(yù)檢請求緩存時間
    -->
  <mvc:mapping path="/rest/**" allowed-origins="*" allowed-methods="POST" max-age="1888"/>
</mvc:cors>

Tips:

  • path中,如果寫成/rest/*的話表示rest下面的子代請求,不會去請求到孫子代,比如/rest/test/test2是請求不到的
  • 如果寫成/rest/**的話表示rest下面的所有后代的請求,比如/rest/test/test2是可以請求到的

配置JavaConfig

使用Java類來進行配置其實也是大同小異,而且在WebMvcConfig接口中,已經(jīng)為我們提供了對應(yīng)的方法addCorsMappings,我們只需要重新該方法即可。

@Override
public void addCorsMappings(CorsRegistry registry) {
  /*
     * 在注冊處添加Mapping,參數(shù)值就是對應(yīng)配置文件里面path
     * 然后就可以一直去點,對應(yīng)的配置xml里面的屬性
     */
  registry.addMapping("/rest/**")
          .allowedOrigins("*")
          .allowedMethods("POST")
          .maxAge(1811);
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot參數(shù)驗證的幾種方式小結(jié)

    SpringBoot參數(shù)驗證的幾種方式小結(jié)

    在日常的接口開發(fā)中,為了防止非法參數(shù)對業(yè)務(wù)造成影響,經(jīng)常需要對接口的參數(shù)進行校驗,例如登錄的時候需要校驗用戶名和密碼是否為空,所以本文介紹了SpringBoot參數(shù)驗證的幾種方式,需要的朋友可以參考下
    2024-07-07
  • MyBatis綁定錯誤提示BindingException:Invalid bound statement (not found)的解決方法

    MyBatis綁定錯誤提示BindingException:Invalid bound statement (not f

    這篇文章主要介紹了MyBatis綁定錯誤提示BindingException:Invalid bound statement (not found)的解決辦法,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-01-01
  • 淺談java中unmodifiableList方法的應(yīng)用場景

    淺談java中unmodifiableList方法的應(yīng)用場景

    下面小編就為大家?guī)硪黄獪\談java中unmodifiableList方法的應(yīng)用場景。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • SpringBoot中JSON數(shù)值溢出問題的處理方案

    SpringBoot中JSON數(shù)值溢出問題的處理方案

    SpringBoot接口因JSON數(shù)值超出int范圍報錯,解決方案為:將字段改為Long、全局異常處理返回友好提示、添加數(shù)據(jù)校驗,推薦使用Long存儲大數(shù)值,避免溢出,本文通過代碼講解的非常詳細,需要的朋友可以參考下
    2025-08-08
  • 使用注解開發(fā)SpringMVC詳細配置教程

    使用注解開發(fā)SpringMVC詳細配置教程

    這篇文章主要介紹了使用注解開發(fā)SpringMVC詳細配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java實現(xiàn)在不同線程中運行的代碼實例

    Java實現(xiàn)在不同線程中運行的代碼實例

    這篇文章主要介紹了Java實現(xiàn)在不同線程中運行的代碼,結(jié)合具體實例形式分析了java多線程操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • SpringMVC實現(xiàn)文件下載功能

    SpringMVC實現(xiàn)文件下載功能

    這篇文章主要為大家詳細介紹了SpringMVC實現(xiàn)文件下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn)

    SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn)

    @PermitAll和@PreAuthorize都是處理安全性的強大工具,本文主要介紹了SpringSecurity中@PermitAll與@PreAuthorize的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • SpringBoot配置文件密碼加密的三種方案

    SpringBoot配置文件密碼加密的三種方案

    這篇文章主要介紹了SpringBoot配置文件密碼加密的三種方案,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • Java中的Runnable,Callable,F(xiàn)uture,F(xiàn)utureTask的比較

    Java中的Runnable,Callable,F(xiàn)uture,F(xiàn)utureTask的比較

    這篇文章主要介紹了Java中的Runnable,Callable,F(xiàn)uture,F(xiàn)utureTask的比較的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

香格里拉县| 梓潼县| 社旗县| 宝坻区| 东明县| 阳曲县| 江西省| 崇义县| 蒙城县| 桦南县| 马公市| 长垣县| 临朐县| 密云县| 商城县| 镇巴县| 黄冈市| 治多县| 翼城县| 通许县| 蕲春县| 丹巴县| 丰台区| 农安县| 重庆市| 松潘县| 平南县| 呈贡县| 卫辉市| 海门市| 汉川市| 延津县| 海阳市| 永定县| 青田县| 社旗县| 吐鲁番市| 冀州市| 武定县| 靖远县| 海兴县|