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)


相关推荐

  • Animation的使用「建议收藏」

    Animation的使用「建议收藏」Animation(动画)有两种分类:补间动画(Tween)和帧动画(Frame)补间动画主要有以下几种:旋转(RotateAnimation)平移(TranslateAnimation)拉伸(ScaleAnimation)透明度(AlphaAnimation)实现的方式:1.实例相应的动画对象2.加载资源中的动画文件动画的属性d

    2022年10月31日
  • pointnet训练文件train.py注释

    pointnet训练文件train.py注释

  • FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」

    FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:ABCD。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:AB。如果没有添加这个标记,则栈情况将会变成:ABCDB。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把

  • WireShark抓包后数据分析

    WireShark抓包后数据分析在分析数据之前,我们先了解一下我们传输数据的结构体系,如下图:这是两种体系,我们常知的一般都是TCP/IP体系结构。TCP/IP体系架构分析不难发现,TCP/IP体系中包含着很多我们熟悉的协议,比如说:http、smtp、https等。而我们人(使用者)是站在应用层之上的,我们想把数据上传或者说发送给别人,就要通过一些应用,如:QQ、微信、百度网盘等。然后就经过一层层加密(在数据包前加个“头”),一层层的传递。Frame层(物理层)分析这是我自己抓包的一个例子,我从我自己的QQ发了一条消息给朋友,

  • 动态调整线程池参数实践

    动态调整线程池参数实践欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、线程池遇到的挑战我们上一篇《一文读懂线程池的实现原理》已经从线程池如何维护自身状态、线程池如何管理任务、线程池如何管理线程三个维度来深入剖析线程池的底层原理与源码剖析,这让我们对线程池的原理有了较为深入的理解。这对我们多线程编程有很大的帮助,但在使用线程池时还是会面临几个棘手的问题。开发人员个人经验与水平参差不齐,配置线程池参数都是按照自己想法来,没有统一.

  • cookie的设置与销毁

    cookie的设置与销毁

发表回复

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

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