• 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这些自定义的请求头**/
  • 相关阅读:
    Modbus: 1. Java使用Modbus读取Slave端数据(TCP)
    Nodejs后台发送https请求验证证书
    Cocos2d-JS: 2.编译到安卓和iOS
    Cocos2d-JS: 1.环境搭建
    [转载]聪明人为什么不统治世界——从围棋到德州扑克
    [转载] 国内外GIS方面的网站(较全)
    [转载]土豪算法(笑话也是实话)
    [转载]混沌理论三原则
    [转]追MM的各种算法
    [转载]建筑美和数学美
  • 原文地址:https://www.cnblogs.com/zhizou/p/11427386.html
Copyright © 2020-2023  润新知