跨域問題-被調用方解決-filter解決方案
1、背景程式先執行還是浏覽器先判斷?
傳回的狀态碼:200表示執行成功
說明請求是先執行,浏覽器後判斷
2、浏覽器如何判斷?
如果請求跨域,請求頭裡就會多一個Origin字段,當服務端傳回資訊的時候,會去判斷響應頭裡是否有對應的字段,如果沒有,即出現跨域請求問題,如果有,即允許跨域。
3、背景Filter代碼實作
(1)編寫CrossFilter過濾器
CrossFilter代碼
package com.ajax.server.filter;
import javax.servlet.*;
importjavax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CrossFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponseservletResponse, FilterChain filterChain) throws IOException, ServletException{
HttpServletResponse res = (HttpServletResponse) servletResponse;
res.addHeader("Access-Control-Allow-Origin","http://localhost:8082");
res.addHeader("Access-Control-Allow-Methods","GET");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
(2)把過濾器注入到spring container中
AjaxserverApplication代碼
package com.ajax.server;
import com.ajax.server.filter.CrossFilter;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.boot.web.servlet.FilterRegistrationBean;
importorg.springframework.context.annotation.Bean;
@SpringBootApplication
public class AjaxserverApplication {
publicstatic void main(String[] args) {
SpringApplication.run(AjaxserverApplication.class,args);
}
@Bean
publicFilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBeanfilterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setFilter(newCrossFilter());
returnfilterRegistrationBean;
}
}
4、測試驗證
驗證通過,普通請求解決了跨域問題