系统环境信息

后台:springboot2

前端:

zxdeMacBook-Pro:bin zhangxu$ node -v
v12.16.3
zxdeMacBook-Pro:bin zhangxu$ npm -v
6.14.4

"axios": "^0.19.0",
 

请求发送代码:

//设置 Content-Type 
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8';
//设置 携带cookies,如果有安全框架或者SSO对cookie校验,设置携带cookies 
axios.defaults.withCredentials = true;
//发送实际请求
axios.get('http://daily.xxx.xxx.net:8080/demo/getDemoConfig', { retry: 5, retryDelay: 1000 })
      .then((res) => {
        console.log('success', res.data);
      })
      .catch((err) => {
        console.log('failed', err);
      });

后台设置header信息

  /**
     * 实际使用发现这种方式对post无效,所以采用下面的方式
     * 通过这种方式以确保所有接口的response header都能够设置相应参数,以解决本地调试跨域问题
     * @param response
     */
    @ModelAttribute
    public void setVaryResponseHeader(HttpServletResponse response) {
        //TODO 环境区分,指定对应的调用源,http://localhost:4444对应的是实际发送请求的origin
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:4444");
        response.setHeader("Access-Control-Allow-Credentials","true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    }
package com.jvc.hdop.web.controller;

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.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class HttpResponseHandler implements Filter {
    private static final Logger log = LoggerFactory.getLogger(HttpResponseHandler.class);
    // 实现HandlerInterceptor  或者 继承HandlerInterceptorAdapter都可以,如果想看着简洁就使用后者
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
        ServletException {
        //设置跨域请求
        HttpServletResponse response = (HttpServletResponse) res;
        //此处ip地址为需要访问服务器的ip及端口号
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:4444");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
        response.setHeader("Access-Control-Max-Age", "3628800");

        System.out.println("设置跨域请求");
        chain.doFilter(req, response);
    }

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


}

 

被请求接口

    @GetMapping("getDemoConfig")
    public String getDemoConfig() {
        return demoConfig;
    }

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐