天天看點

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

跨域問題-被調用方解決-filter解決方案

1、背景程式先執行還是浏覽器先判斷?

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

傳回的狀态碼:200表示執行成功    

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

說明請求是先執行,浏覽器後判斷

2、浏覽器如何判斷?

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

如果請求跨域,請求頭裡就會多一個Origin字段,當服務端傳回資訊的時候,會去判斷響應頭裡是否有對應的字段,如果沒有,即出現跨域請求問題,如果有,即允許跨域。

3、背景Filter代碼實作

(1)編寫CrossFilter過濾器

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

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中

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

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、測試驗證

跨域問題-被調用方解決-filter解決方案跨域問題-被調用方解決-filter解決方案

驗證通過,普通請求解決了跨域問題

繼續閱讀