Java + Ajax跨域解决方案整理

Java + Ajax跨域解决方案整理为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。产生跨域的情况有:1.域名不同,端口也不同;2.域名相同但是端口不同;3.域名不同,端口相同。解决方案:一、JSONP方式1.只支持get方法,不支持postfang方法;使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。二、使用springMVC架构的,使用版本4.2以上…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。

产生跨域的情况有:

1.域名不同,端口也不同;

2.域名相同但是端口不同;

3.域名不同,端口相同。

解决方案:

一、JSONP方式

1.只支持get方法,不支持postfang方法;

使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。

二、使用springMVC架构的,使用版本4.2以上

可以使用@CorsOrigin注解,可以放在方法上,也可以放在类名上

三、使用filter

该方法也参考了spring跨域的实现

public class PostFilter implements Filter {

	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {

		HttpServletResponse response = (HttpServletResponse) resp;
		response.setHeader("Access-Control-Allow-Origin",
				((HttpServletRequest) req).getHeader("Origin"));
		response.setHeader("Access-Control-Allow-Methods",
				"POST,GET,OPTIONS,DELETE");
		response.setHeader("Access-Control-Max-Age", "3600");
		response.setHeader("Access-Control-Allow-Headers",
				"Origin, X-Requested-With, Content-Type, Accept");
		response.setHeader("Access-Control-Allow-Credentials", "true");
		chain.doFilter(req, resp);

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO 自动生成方法存根

	}

}

web.xml配置加入

        <filter>
		<filter-name>action</filter-name>
		<filter-class>com.filter.PostFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>action</filter-name>
		<url-pattern>*</url-pattern>
	</filter-mapping> 

前端ajax

	$.ajax({
		type:"post",
		url:url,
		data:jsonstr,
		dataType:"json",
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
		success: function(msg){
		
		    },
		error:function(XMLHttpRequest, textStatus, errorThrown){
		   var readystate=XMLHttpRequest.readyState;
		    console.log('readystate:'+readystate+'textStatus:'+textStatus);
		       if(readystate==4)
			   readystate='该帐号已被他人登录';
			   else readystate='请检查网络';
			$('#label1').text(readystate);	
			$.mobile.hidePageLoadingMsg(); 
			},
		complete:function(XHR, TS){XHR = null;}
		});

以上便是我用过的方法

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172568.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ubuntu1804安装教程详细(怎么安装ubuntu18.04)

    UbuntuUbuntu叫法很多(友帮拓、优班图、乌班图),是一个一琢磨应用为主的开源GUN/Linux操作系统,接下来记录了在VMwareWorkstationPro中安装Ubuntu18.04准备工作下载安装VMware虚拟机VMware下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pr…

  • MySQL联合索引or_MySQL联合索引命中条件

    MySQL联合索引or_MySQL联合索引命中条件转于:https://blog.csdn.net/claram/article/details/77574600首先明确:为什么要用联合索引?对于查询语句“SELECTE.*FROMEWHEREE.e1=1ANDE.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1,e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索…

  • 1、win10下的python3.5.4安装

    现在越来越多人入坑python了,当然我也不例外。作为一个java程序员的我,在空余时间就慢慢学习python了 。第一件事就是安装Python啦。(主要以Python 3.5.4为例)一、官网下载安装包官网地址:https://www.python.org/downloads/windows/ 都说越新越好嘛,其实我觉得都差不多,但是3.6跟3.5还是有点区别的嘛,所以我…

    2021年11月30日
  • 小程序父子组件传参_微信小程序修改全局变量

    小程序父子组件传参_微信小程序修改全局变量点击原创或者分类虽然样式如首页一样变化,但是其父组件的最终isActive的值并未发生改变,但是样式发生改变是因为拿取的是Component>里面的properties中的tabs,你点击下去的时候一样拿取tabs数组,所以不会报错。因此子组件必须通过方法进行修改父组件中的isActive的值,方法如下:components/Tabs/Tabs.js点击事件触发父组件中自定义事件同时传递数据给父组件this.triggerEvent(“父组件自定义事件的名称”,要传递的参数)…

  • 视频编解码学习之二:编解码框架「建议收藏」

    视频编解码学习之二:编解码框架「建议收藏」第四章视频编码基础 1.压缩码流语法:码流中各个元素的位置关系01001001…图像编码类型(01),宏块类型(00),编码系数1001等语义:每个语法元素所表达的意义。例如:图像编码类型 2.

  • poj -2632 Crashing Robots

    poj -2632 Crashing Robots

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号