踩坑記- Spring Boot - CORS 跨域 - 瀏覽器同源策略

一、解決辦法,建立一個過濾器,處理全部response響應頭

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName="ServletFilter",urlPatterns="/*")
public class ServletFilter implements Filter{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        //before
        HttpServletResponse res = (HttpServletResponse) response;

        res.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); // 容許全部請求類型
        res.setHeader("Access-Control-Max-Age", "3600");   // 本次預檢請求的有效期,單位爲秒
        res.setHeader("Access-Control-Allow-Origin",((HttpServletRequest)request).getHeader("Origin")); // 獲取當前請求地址,容許當前請求地址
        res.setHeader("Access-Control-Allow-Headers","authorization,Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,X-E4M-With,userId,token,Access-Control-Allow-Headers,Access-Control-Allow-Origin"); // 容許請求頭KEY
        //after
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }
    
}

二、問題描述-XmlHttpRequest同源策略

禁止使用XHR對象向不一樣源的服務器地址發起HTTP請求;java

三、請求頭詳解

Access-Control-Allow-Methods

容許請求類型跨域

Access-Control-Max-Age

設置本次預檢請求的有效期,單位爲秒。第一次是瀏覽器使用OPTIONS方法發起一個預檢請求,第二次纔是真正的異步請求,第一次的預檢請求獲知服務器是否容許該跨域請求:若是容許,才發起第二次真實的請求;瀏覽器

Access-Control-Allow-Origin

容許當前請求地址。設置該頭值爲「*」會致使,除Chrome外的全部瀏覽器請求失敗(以下圖);因此獲取當前請求地址,並設置值爲當前請求地址便可。
服務器

Access-Control-Allow-Headers

容許請求頭KEY。設置該頭值爲「*」會致使,除Chrome外的全部瀏覽器請求失敗;因此儘量的將,請求頭KEY都列舉出來,或碰見一個請求頭設置一個KEY,或設置本身須要的請求頭KEY;異步

相關文章
相關標籤/搜索