场景
在下新手,用优快云记个笔记,记录每个踩过的坑,方便日后复制粘贴。
我用多个springnoot项目互相请求,服务A的地址是localhost:8081,服务B地址是localhost:8082,直接从A写一个ajax请求B会报错,因为跨域了。
解决方案
解决方案好几种,我比较喜欢这一种, 在服务B加个filter ,代码如下:
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 {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response=(HttpServletResponse)servletResponse;
response.addHeader("Access-Control-Allow-Credentials","true");
response.addHeader("Access-Control-Allow-Origin","*");
response.addHeader("Access-Control-Allow-Methods","*");
response.addHeader("Access-Control-Allow-Headers","Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
if (((HttpServletRequest) servletRequest).getMethod().equals("OPTIONS")) {
response.getWriter().println("ok");
return;
}
filterChain.doFilter(servletRequest, response);
}
//重写init和destroy方法,否则tomcat启动失败
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void destroy() { }
}