spring解決跨域


https://www.jianshu.com/p/abb5f6bf92c3   強烈推薦閱讀至少能了解一點點原理

https://blog.csdn.net/qq_43486273/article/details/83272500

1.使用過濾器解決跨域問題

 access-control-allow-headers: Authorization, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, X-File-Type, Cache-Control, Origin

import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class CORSFilter implements Filter {
    /**
     * 解決ajax跨域問題
     *
     * @param request
     * @param response
     * @param chain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        String origin = req.getHeader("Origin");/*獲取客戶端的域名**/

        res.addHeader("Access-Control-Allow-Credentials", "true");/*允許帶Cookie的跨域Ajax請求*/
        res.addHeader("Access-Control-Allow-Origin", origin); /*設置允許訪問的域名地址**/
        res.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");/*允許請求的方式**/
        res.addHeader("Access-Control-Allow-Headers", "*");/*設置允許前端添加所有自定義請求頭**/
//      res.addHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, X-File-Type, Cache-Control, Origin");

        /**
         * 設置預檢命令的緩存時效。單位是"秒"
         * 如果沒有失效,則不會再次發起OPTION預檢請求
         */
        res.addHeader("Access-Control-Max-Age", "7200");

        if (req.getMethod().equals("OPTIONS")) {
            response.getWriter().print("");
            res.setStatus(204);
        }
        try {
            chain.doFilter(request, response);
        } catch (ServletException e) {
            int code = res.getStatus(); //獲取相應狀態碼res.getStatus()
            JSONObject jsonData = new JSONObject();
            jsonData.put("code", code);
            jsonData.put("msg", "OPTIONS The request failed");
            jsonData.put("result", "");
            String dataStr = jsonData.toJSONString();
            response.getWriter().println("{data:" + dataStr + "}");
        }
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
}

 

 

res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN,token");/**前端可以發送token這些自定義的請求頭**/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM