此方法只支持spring4.2及以上版本

一、问题描述

A系统和B系统,A系统想通过ajax调用B系统中的后台方法(B系统SpringMVC)

二、问题解决

  1.A系统中ajax:

                var str = "{'id':'89','fundCode':'000311'}";    jQuery.ajax({url:'http://172.88.88.888:8180/test/app/product/public/getManaAndComp',type:"post",dataType:"text",data:{"param":str,"osFlag":'3'},async:true,success:function(serverinfo){console.log(serverinfo);var Data=Base64.decode(serverinfo);                            Data=JSON.parse(Data);console.log(Data);}, // success 结束
                    error:function(){console.log('error');                }});

  2.B系统配置  只需配置过滤器

  web.xml

     <filter><filter-name>cors</filter-name><filter-class>com.datangwealth.common.filter.CorsConfig</filter-class></filter><filter-mapping><filter-name>cors</filter-name><url-pattern>/*</url-pattern></filter-mapping>

CorsConfig.java
package com.datangwealth.modules.monitor.service;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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;public class CorsConfig  implements Filter {
@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) servletResponse;HttpServletRequest request = (HttpServletRequest) servletRequest;response.setHeader("Access-Control-Allow-Origin", "*");           String token = request.getHeader("token");System.out.println("filter origin:"+token);//通过打印,可以看到一次非简单请求,会被过滤两次,即请求两次,第一次请求确认是否符合跨域要求(预检),这一次是不带headers的自定义信息,第二次请求会携带自定义信息。if ("OPTIONS".equals(request.getMethod())){//这里通过判断请求的方法,判断此次是否是预检请求,如果是,立即返回一个204状态吗,标示,允许跨域;预检后,正式请求,这个方法参数就是我们设置的post了response.setStatus(204); //HttpStatus.SC_NO_CONTENT = 204response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");//当判定为预检请求后,设定允许请求的方法response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, Token"); //当判定为预检请求后,设定允许请求的头部类型response.addHeader("Access-Control-Max-Age", "3600");                           }filterChain.doFilter(servletRequest, servletResponse); }@Overridepublic void init(FilterConfig arg0) throws ServletException {        }
}

这样就解决了跨域的问题,跨域还可以使用jsonp、配置nginx解决,还有一种最简单的,直接在servlet中写上一行response.setHeader("Access-Control-Allow-Origin", "*") 就可以了。

转载于:https://www.cnblogs.com/cuijiade/p/8962248.html

cors解决ajax跨域相关推荐

  1. jsonp-反向代理-CORS解决JS跨域问题的个人总结

    jsonp-反向代理-CORS解决JS跨域问题的个人总结 网上说了很多很多,但是看完之后还是很混乱,所以我自己重新总结一下. 解决 js 跨域问题一共有8种方法, jsonp(只支持 get) 反向代 ...

  2. Vue学习笔记05 组件的自定义事件-组件通信-$nextTick-脚手架解决ajax跨域-插槽-过渡动画

    文章目录 Vue学习笔记05 父组件给子组件传值 注意点 子组件给父组件传值 父组件接受子组件的传值 通过函数 组件的自定义事件 事件绑定的第一种写法 @或v-on 事件绑定的第二种写法:使用ref ...

  3. 如何解决ajax跨域java,ajax跨域问题,从java角度解决

    前言 今天给小伙伴开放一个接口方便调试数据,但是老是出现CROS策略阻塞,查询资料后知道了是ajax跨域引起的,以此记录此次解决问题的过程. 什么是ajax跨域 ajax跨域的原理 ajax出现请求跨 ...

  4. 用iframe设置代理解决ajax跨域请求问题

    用iframe设置代理解决ajax跨域请求问题 参考文章: (1)用iframe设置代理解决ajax跨域请求问题 (2)https://www.cnblogs.com/ranzige/p/370965 ...

  5. 解决AJAX跨域WCF的问题详解

    解决AJAX跨域WCF的问题详解 参考文章: (1)解决AJAX跨域WCF的问题详解 (2)https://www.cnblogs.com/jooucks/p/7159147.html 备忘一下.

  6. 使用SpringMVC解决Ajax跨域问题

    使用SpringMVC解决Ajax跨域问题 参考文章: (1)使用SpringMVC解决Ajax跨域问题 (2)https://www.cnblogs.com/mengyao/p/6294787.ht ...

  7. php json -gt;访问,【转】Php+ajax+jsonp解决ajax跨域问题

    首先:jsonp是json用来跨域的一个东西. 原理是通过script标签的跨域特性来绕过同源策略. 发送端: $.ajax({ type : "post", url : &quo ...

  8. jsonp解决ajax跨域问题,用JSONP解决ajax跨域问题

    JSONP:JSON With Padding 要点: 1.script标签 2.用script标签加载资源是没有跨域问题的 概要: 在资源加载进来之前先定义一个函数,这个函数接受一个参数(数据),函 ...

  9. 如何解决ajax跨域问题(转)

    由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题.本篇将讲述一个小白从遇到跨域不 ...

最新文章

  1. Java与C语法上的区别
  2. 保存数组类型数据_JS基本数据类型和引用数据类型的区别及深浅拷贝
  3. ACM-ICPC 2019 山东省省赛 A Calandar
  4. Linux或者Mac解压乱码问题
  5. 用ajax替换html代码,替换Ajax响应一个div的内部HTML(Replace inner HTML of a div w
  6. linux umount 时出现device is busy 的处理方法--fuser
  7. vscode在windows10系统下进行go语言编程(无法代码提示)
  8. 个人的一些MySql管理经验
  9. 更改计算机复制快捷键,电脑上怎么把一句话设置快捷键,电脑快捷键复制一句话-...
  10. 博为峰Java技术文章 ——JavaSE Swing JInternalFrame内部窗体面板II
  11. 20个最强的基于浏览器的在线代码编辑器
  12. ansys经典界面分析工字钢_ANSYS教程,ANSYS经典界面与WORKBENCH的区别
  13. 单片机控制两个步进电机画圆_单片机控制的步进电机程序框图
  14. 51单片机 定时器0中断实现LED流水灯
  15. ie11无法播放html,IE11无法显示flash?IE11无法播放视频的解决方法
  16. 网页中审查元素与查看网页源代码的区别
  17. 【GreenDao学习笔记】SQLite数据库保存float/double小数类型精度丢失
  18. Java相互关注_java --关注/取消关注
  19. Chrome 安装插件 win10 Edge 安装 位置
  20. MC辨析(蒙特卡洛)

热门文章

  1. C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持
  2. 网上书城java负责_网上书城项目总结(servlet_jsp+javaBean)
  3. 使用 ApplicationLoader 上传应用到 Appstore
  4. Linux环境下静态库的生成和使用 (.a文件)
  5. 3 Git 分支 - 分支管理
  6. Linux中磁盘还有空间,但创建文件时提示空间不足
  7. 轻松使用zstd来解压缩
  8. Linux系统下各文件目录的含义 入门
  9. php dede 发布时间_dede 采集到数据后,发布日期变为本地日期解决方法
  10. 在Linux执行命令报错”Arg list too long”的原因分析