springboot使用Filter解決前後端分離,產生的跨域問題
環境:IDEA編寫後端程式碼,前端使用HBuilder實現。
問題描述:Failed to load http://localhost:8080/user/login: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8020' is therefore not allowed access.
問題產生:Ajax請求路徑為 http://localhost:8080/user/login
可以檢視瀏覽器中詳細資訊
因為瀏覽器的同源策略,所謂的同源是指,域名,協議,埠相同
因此產生了跨域問題,解決方式如下:
1.在自己的專案下建立一個類,我這裡是PassHttpFilter類
2.具體程式碼:
import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component @WebFilter(urlPatterns = "/*", filterName = "authFilter") //這裡的“/*” 表示的是需要攔截的請求路徑 public class PassHttpFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse)servletResponse; httpResponse.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"); httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.addHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8020"); filterChain.doFilter(servletRequest, httpResponse); } @Override public void destroy() { } }@WebFilter(urlPatterns = "/*", filterName = "authFilter")
/* 是允許攔截請求的url,表示所有的請求
authFilter 是攔截器的名稱
3.在doFilter方法中新增如下程式碼
HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;
httpResponse.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
httpResponse.addHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8020");
說明:httpResponse.addHeader("Access-Control-Allow-Origin","http://127.0.0.1:8020")新增的響應的地址;
4.這樣就行了,啟動專案可以在視窗看到對應的Filter的啟動資訊 ,這樣就解決了跨域問題,輕鬆做到前後端分離。
2018-06-22 14:46:29.965 INFO 19188 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'passHttpFilter' to: [/*]
相關文章
- 前後端分離解決跨域問題後端跨域
- 前後端分離 跨域問題解決後端跨域
- 解決 Laravel 5.8 前後端分離跨域問題Laravel後端跨域
- 前後端分離解決session跨域丟失問題後端Session跨域
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- SpringBoot解決前後端跨域問題Spring Boot後端跨域
- Vue+SpringBoot前後端分離中的跨域問題VueSpring Boot後端跨域
- 前後端分離專案,如何解決跨域問題?後端跨域
- 前後端分離實踐 — 如何解決跨域問題後端跨域
- vue2 前後端分離專案ajax跨域session問題解決Vue後端跨域Session
- 超簡單的前端跨域、前後端分離解決方案前端跨域後端
- SpringBoot 配置CORS處理前後端分離跨域配置無效問題解析Spring BootCORS後端跨域
- 前後端分離下的跨域CAS請求後端跨域
- SpringBoot 前後端動靜分離+叢集 遇到的第一個問題:跨域session共享Spring Boot後端跨域Session
- LiveNode.js 超簡單的前端跨域、前後端分離解決方案Node.js前端跨域後端
- 無需CORS,用nginx解決跨域問題,輕鬆實現低程式碼開發的前後端分離CORSNginx跨域後端
- 利用gulp解決前後端分離的header/footer引入問題後端Header
- Spring Boot前後端分離專案Session問題解決Spring Boot後端Session
- Laravel+vue.js 前後端分離解決跨域後獲取資料庫使用者列表(五)LaravelVue.js後端跨域資料庫
- 前後端分離使用 Token 登入解決方案後端
- 前後分離實現中,後臺 Laravel 接收資料的跨域解決方案Laravel跨域
- vue前後端分離解決每次請求session都會變的問題Vue後端Session
- SpringBoot跨域問題解決方案Spring Boot跨域
- 前後端分離——使用OSS後端
- 網易NEI在面臨前後端分離問題,所提供的完整解決方案後端
- 使用Nginx來解決跨域的問題Nginx跨域
- java 後端 控制跨域問題Java後端跨域
- 解決跨域問題跨域
- 搞懂:前端跨域問題JS解決跨域問題VUE代理解決跨域問題原理前端跨域JSVue
- 解決 jquery使用ajax請求發生跨域問題的辦法jQuery跨域
- SpringBoot+Vue前後端分離,使用SpringSecurity完美處理許可權問題(一)Spring BootVue後端Gse
- SpringBoot+Vue前後端分離,使用SpringSecurity完美處理許可權問題(六)Spring BootVue後端Gse
- cookie跨域共享 cookie二級域名共享 前後端分離專案共享cookieCookie跨域後端
- 前後端分離後的前端時代後端前端
- 淺談前後端分離中的跨資源共享(CORS)後端CORS
- SpringBoot中通過CORS解決跨域問題Spring BootCORS跨域
- 關於 vue Laravel5.5 前後段分離式開發介面跨域問題請教VueLaravel跨域
- CROS 解決跨域問題ROS跨域