Java + Ajax跨域解决方案整理
2023-06-13 09:11:01 时间
大家好,又见面了,我是你们的朋友全栈君。
为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。
产生跨域的情况有:
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;}
});
以上便是我用过的方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172568.html原文链接:https://javaforall.cn
相关文章
- ajax跨域解决方案_java如何解决跨域问题
- ajax跨域解除方案,关于Ajax跨域问题及解决方案详析「建议收藏」
- ajax的面试题_java中框架面试题
- java强制删文件夹_Java 删除文件夹 和 文件 集合
- java数组的声明_Java数组定义常用方法[通俗易懂]
- 学java用什么编译器_学习Java用什么编译软件好
- java开发常用四大框架_Java 后台开发框架[通俗易懂]
- 简单的java图片存储方法
- java setproperty 未生效_Java System类setProperty()方法及示例[通俗易懂]
- 临时重定向和永久重定向的状态码_java重定向怎么写
- Java 中通过 key 获取锁
- 【说站】java之JVM的字节码结构
- 带你学java核心技术图形程序设计:颜色+为文本设定特殊字体+图像
- java executeupdate_Java自学-JDBC execute与executeUpdate的区别
- spring ajax 长轮询,Ajax轮询和长轮询
- Java截取字符串方法_java通过split截取字符串
- java工程师需要掌握的技能_java软件工程师需要学什么
- Java面试:单例模式
- Java字符串常用操作方法及代码详解编程语言
- Java基础加强之并发(二)常用的多线程实现方式详解编程语言
- Java格式化CST日期时间详解编程语言
- 注册MySQL,让你的Java技能更上一层楼(java注册mysql)
- Java操作Oracle数据库:实现数据库连接与访问(java连接oracle数据库)
- Java 正则表达式替换正斜杠 ( / )详解编程语言
- php转java 系列1 Spring boot安装教程详解编程语言
- 更新LINUX下的Java版本(linux更新java)
- 时间解决Java中Redis过期时间问题(redisjava过期)
- 使用redis .jar实现高效的Java应用缓存管理(redis.jar)
- 使用Java监听MySQL数据库变化(java监听mysql)
- 器使用Java管理Linux服务器变得如此容易(javalinux服务)
- Java程序调用Linux系统命令实现更多功能(java调用linux命令)
- 探究Ajax的MySQL驱动原理(ajax原理 mysql)
- MySQL与Ajax 精彩无穷的开发实现(ajax与mysql)
- 浅析java中Integer传参方式的问题
- java实现sunday算法示例分享