當一個資源從與該資源本身所在的服務器不同的域或端口不同的域或不同的端口請求一個資源時,資源會發起一個跨域 HTTP 請求。
出於安全考慮,瀏覽器會限制從腳本內發起的跨域HTTP請求。跨域資源共享機制允許 Web 應用服務器進行跨域訪問控制,從而使跨域數據傳輸得以安全進行。瀏覽器支持在 API 容器中使用 CORS,以降低跨域 HTTP 請求所帶來的風險。
針對於JAVA開發而言,為了更好的做業務分層,經常會將前后端代碼分離開來,發布在不同的服務器上,此時,便會遇到跨域的問題。
跨域有很多種解決方案,如果你在使用SpringMVC來開發服務器的話,這個文章會對你有所幫助。它定義了一個Filter來實現跨域請求的問題,實現從不同的服務器上獲取HTTP請求資源。
代碼示例如下:
## 1. 添加一個JAR包,來實現CORS功能:
gradle: 'com.thetransactioncompany:cors-filter:2.5'
## 2. 在項目的web.xml文件下,添加一個Filter標簽:
<!--CORS 跨域資源訪問--> <filter> <filter-name>CORS</filter-name> <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> <init-param> <param-name>cors.allowGenericHttpRequests</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.allowOrigin</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowSubdomains</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>cors.supportedMethods</param-name> <param-value>GET, HEAD, POST, OPTIONS</param-value> </init-param> <init-param> <param-name>cors.supportedHeaders</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.exposedHeaders</param-name> <param-value>X-Test-1, X-Test-2</param-value> </init-param> <init-param> <param-name>cors.supportsCredentials</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.maxAge</param-name> <param-value>3600</param-value> </init-param> </filter> <filter-mapping> <filter-name>CORS</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
## 3. 重啟你的服務,就可以實現跨域請求了。