系统环境信息
后台: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;
}