报错:

造成原因:
不同域名之间互相访问造成请求资源跨域。
解决方法:
java 添加一个过滤器
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest)servletRequest;
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
// 自定义的请求头也要添加
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
String method = request.getMethod();
if(method.equalsIgnoreCase("OPTIONS")){
servletResponse.getOutputStream().write("Success".getBytes("utf-8"));
}else{
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
这样配置之后,不会出现跨域问题,因为请求不安全 ,系统每次都会发送一个OPTIONS 的预检测,浏览器上会看到请求有2次,一次OPTION,一次是真正请求。
OPTIONS:

由于我们过滤器处理了OPTIONS 请求,返回200,浏览器才会调用真正的请求。
GET:

因为OPTIONS 的问题导致保存数据的时候出现问题,
- application/x-www-form-urlencoded、multipart/form-data、text/plain
- application/json;charset=UTF-8
如果是json格式的话过滤器中需要允许Content-Type
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization,Blade-Auth,uid,Content-Type");
参考:
博客主要讲述跨域问题,不同域名互相访问会造成请求资源跨域。解决方法是在Java中添加过滤器,配置后系统会发送OPTIONS预检测,浏览器有两次请求。因OPTIONS问题保存数据可能出错,若为json格式,过滤器需允许Content-Type。
1万+

被折叠的 条评论
为什么被折叠?



