springboot實現ajax跨域請求

NO IMAGE

有段時間沒寫文章了。看到有人提問ajax跨域請求的問題。

博主要再次強調,跨域,就是從不同的的IP埠獲取資料,比如說,從www.baidu.com獲取資料,就叫跨域!那麼localhost:8080與localhost:8081之間呢?也叫跨域。如果處理的不好,就會報錯,不僅前端報錯,後端也會報錯。

那麼如何解決呢?著急的人,請直接往下看,不急的請聽我細細道來,一定能解決您的問題。我再此保證!

好多人都說,spring對跨域有自己的一套,比如實現了這個類那個類的。還有說是在ajax裡面加上 _method 等等,眾說紛紜啊!到底是不是大家所說的那樣呢?先來看下常規的。解決PUT和DELETE請求時,_method方法到底好不好使呢??答案是,確實管用!那麼實現其他類好使嗎?答案是:在springboot中不適用。因為它沒有XML可以配置。OK,好了,既然你說_method能解決PUT請求,那就用它唄。答案是,肯定不行。為啥不行呢?

你想一想,你要去用PUT,DELETE,說明什麼?肯定是RestFul請求啊,對不對。既然是rest,那麼肯定會部署伺服器啊,那麼伺服器的埠和地址肯定不是你本機吧,那你怎麼指定啊?涉及什麼問題啊,跨域,是跨域了,對不對?都跨域了,你是不是應該解決跨域問題啊。那你這個_method方法還能搞定需求嗎,指定不能啊。那咋辦啊?網上有很多答案,比如jsonp啊,$.getJSON啊等等,太多太多。但實際解決的問題,很少。比如jsonp他的返回格式需要callback,那麼你封裝json時就要加入callback,那麼就毀壞了rest的格式。至於其他的,更別提了,不實用。

直接看程式碼,

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CrossDomain extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
}

直接把這個程式碼貼上進去啟動,就會完成跨域的安全性過濾。

原理還得看程式碼。以後有時間,我會和大家一起分析程式碼。先到這吧,謝謝。