91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在vue+springboot項目中實現一個CORS跨域請求

發布時間:2021-03-11 16:35:44 來源:億速云 閱讀:643 作者:Leah 欄目:web開發

這篇文章給大家介紹怎么在vue+springboot項目中實現一個CORS跨域請求,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1.springboot+vue項目的構建和啟動

細節不在此贅述,任何簡單的springboot項目就可以,而前端vue項目只需用axios發ajax請求即可。

我的demo里填寫用戶名和密碼,然后點擊登錄按鈕向后臺發起登錄請求,js代碼如下:

methods:{
     login:function() {
      //var userParams = this.$qs.stringify(this.User);
       /* var userParams = JSON.stringify(this.User);*/
       this.$axios.post("http://localhost:8080/login",this.User).then(res=>{
       alert(res.data);
      });
     }
   }

后臺控制器部分,對登錄請求的處理:

/*CORS設置方法1:@CrossOrigin(origins = "http://localhost:8081", maxAge = 3600)*/
  @RequestMapping(value="/login",method = RequestMethod.POST, produces = "application/json;charset=UTF-8" )
  @ResponseBody
  public String userlogin(@RequestBody JSONObject user) {
		/*String name=request.getParameter("name");
		String password=request.getParameter("password");*/
		System.out.println("name: " + user.get("name"));
		System.out.println("password: " + user.get("password"));
		String name = (String) user.get("name");
		String password = (String) user.get("password");
  	if(name.equals("zsz") && password.equals("888888")){ 		
			return "login success!";
		}else{
			return "login failed";
		}
  }

后臺以8080端口啟動,前臺以8081啟動,此時無法跨域,瀏覽器控制臺會報錯:

怎么在vue+springboot項目中實現一個CORS跨域請求

2.springboot設置CORS

此處主要有兩種方法(但是貌似有其他博客還有更多種),在springboot中實現都比較簡單(反正springboot好像就是各種省事各種簡單)。

方法1:

@CrossOrigin(origins = "http://localhost:8081", maxAge = 3600)

直接在控制器方法前注解,設置可以跨域的源ip和端口,以及預檢有效期maxAge等參數。

方法2:

編寫配置類,配置全局的CORS設置。

@Configuration
public class MyCorsConfig {	
	@Bean
	public WebMvcConfigurer corsConfigurer(){
	 return new WebMvcConfigurerAdapter() {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
        // 限制了路徑和域名的訪問
        /*registry.addMapping("/api*").allowedOrigins("http://localhost:8081");*/
       registry.addMapping("/**")
        .allowedOrigins(ALL)
        .allowedMethods(ALL)
        .allowedHeaders(ALL)
        .allowCredentials(true);
      }
    };
	}		
}

如果路徑配置成以上的 /**則對所有源路徑均接受跨域訪問,當然也可以配置更詳細的路徑。

這樣可以成功訪問后臺,瀏覽器中可以看到http請求和響應的結果如下圖:

怎么在vue+springboot項目中實現一個CORS跨域請求

3.CORS非簡單請求預檢請求的抓包驗證

根據阮一峰大神的博客所述,CORS簡單請求只發送一次請求,服務器設置支持CORS則會在響應內容中添加Acess-Control-Allow-Origin等字段,否則不添加,瀏覽器知道出錯,從而拋出異常;CORS非簡單請求時,會先進行一次預檢(preflight)請求,瀏覽器根據響應內容進行正式的XMLHttpRequest請求。

在我的demo中,我通過將http請求的 content-type 設置為application/json進行非簡單請求。此處要說明一下,axios默認情況下發送請求的格式是application/json而不是我之前用jQuery發送ajax請求的application/x-www-form-urlencoded, 而我之前用的另一種方法構造查詢字符串,最終發送請求的content-type會變為application/x-www-form-urlencoded。

var userParams = this.$qs.stringify(this.User)

前臺請求代碼如本文第一節中所示,在axios請求中直接傳入User對象即可。在后端不設置CORS的時候,控制器信息為:

怎么在vue+springboot項目中實現一個CORS跨域請求

協議內容為:

怎么在vue+springboot項目中實現一個CORS跨域請求

而設置了CORS,預檢請求結果為:

怎么在vue+springboot項目中實現一個CORS跨域請求

請求成功,并且在響應頭中添加了各種字段。

再次發起XHR請求后,結果為:

怎么在vue+springboot項目中實現一個CORS跨域請求

關于怎么在vue+springboot項目中實現一個CORS跨域請求就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

波密县| 凉山| 翁牛特旗| 垦利县| 郑州市| 澄城县| 牟定县| 斗六市| 武乡县| 南宫市| 苗栗市| 边坝县| 晴隆县| 错那县| 增城市| 孝昌县| 大洼县| 沙洋县| 东辽县| 若羌县| 福鼎市| 堆龙德庆县| 鱼台县| 厦门市| 桃园市| 山阴县| 大邑县| 桑日县| 莎车县| 高碑店市| 松滋市| 会宁县| 嘉禾县| 华蓥市| 涞源县| 南城县| 长沙市| 利辛县| 讷河市| 若羌县| 雷山县|