当前位置: 首页 > news >正文

java中跨域问题及解决方案

1. 什么是跨域

从不同的地址访问另外一个地址就是跨域

2.跨域一定会有异常吗

跨域异常只会在前端发生,后端跨域不会产生异常
因为浏览器有一个叫做同源策略的东西,它发现不同域之间的访问是不安全的行为,会禁止,所以会抛出异常

3.五种解决跨域的方式

1. 跨域请求JSONP

前端配置

$.agax({url:’http://localhost:8080/cors/jsonp/1’,dataType:"jsonp",//jsonp:'a',不指定默认callback//jsonpCallback:"cc",不指定自动生产type:'GET',success:function(){alert(result.data);}});

后端配置:

@GetMapp("cors/jsonp/{id}")
public JSONObject getUser(@PathVariable Integer id,String callback){User user=new User("xushu","jsonp");return new JSONPObject(callback,new Resule<>(200,"SUCCESS",user))
}

好处:兼容各种浏览器
弊端:前端端都需要配置-耦合度高

2. 跨域请求cors【单一】

注意:需要用到@CrossOrigin注解

前端配置

$.agax({url:’http://localhost:8080/cors/1’,type:'GET',success:function(){alert(result.data);}});

后端配置:

@GetMapp("cors/{id}")
@CrossOrigin("http://localhost:8081")
public JSONObject getUser(@PathVariable Integer id){User user=new User("xushu","jsonp");return new Resule<>(200,"SUCCESS",user)}

注解:只支持单一的接口

3. 跨域请求cors【批量】

注意:后端需要实现WebMvcConfigurer

后端配置:

public class MyWebMvcConfigurer implements WebMvcConfigurer{@Overridepublic void addCorsMappings(CorsRegistry registry){registry.addMapping("user/*")//配置那些接口可以跨域.allowedOrigins("http://localhost:8080")//配置那些来源有权跨域.allowedMethods("GET","POST","DELETE","PUT");//配置运行跨域访问方法};
}

4. 跨域请求cors【所有】

注意:后端需要配置过滤器

后端配置:

@Configuration
public class MyCorsFilter{//@Beanpublic CorsFilter corsFilter(){//1.创建CORS配置对象CorsConfiguration config=new CorsConfiguration();//支持域名config.addAllowedOriginPattern("*");//是否发送cookieconfig.setAllowCredentials(true);//支持请求方式config.addAllowedMethod("*");//添加地址映射UrlBasedCorsConfigurationSource corsConfigurationSource=new UrlBasedCorsConfigurationSource ();corsConfigurationSource.registerCorsConfiguration("/**",config);//返回corsFilter对象return new CorsFilter(corsConfigurationSource);}
}

优缺点:

优点:前端不需要写代码就可以支持,主要靠服务器进行配置**
缺点:IE浏览器不能低于IE10,浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉【option请求】

5.nginx 反向代理

在这里插入图片描述

http://www.xdnf.cn/news/1018135.html

相关文章:

  • Spring XML 常用命名空间配置
  • React Native 项目实战 —— 记账本应用开发指南
  • 【React Native 性能优化:虚拟列表嵌套 ScrollView 问题全解析】
  • Java-数组-异常(基础)
  • 包含40个购物网站UI界面的psd适用于电商项目
  • 在 Linux 系统中通过 yum 安装 Sublime Text
  • 平压印刷机设计原理与关键技术研究
  • 网络安全防护:点击劫持
  • Linux 系统设置时区
  • Token 的流动性:为什么它是项目的关键?
  • 传染病传播模拟:基于社会接触网络的疫情预测模型
  • 【设计模式】UML图与工厂模式
  • 德信软件,512天,我的创作纪念日
  • RocketMQ总结
  • Rimini Street宣布将SAP ECC和S/4HANA支持延长至2040年,为企业提供替代路径
  • 基于大模型预测过敏性紫癜的技术方案大纲
  • Rust 学习笔记2025.6.13
  • Excel词典(xllex.dll)文件丢失或损坏导致功能异常?别慌!专业修复策略来了!
  • 排序--计数排序
  • Active Directory Certificate Services(AD CS)攻击基础
  • Java单例模式有几种实现方式
  • 为什么py文件打包后大小会增加很多?
  • 亚马逊云 Lambda 容器化部署教程
  • Rust 学习笔记:关于处理任意数量的 future 的练习题
  • Redis 使用场景、缓存什么数据?怎么保证数据一致性?
  • 自定义线程池 4.0
  • 基于51单片机的简易售货机系统
  • 使用 C/C++ 和 OpenCV 构建智能停车场视觉管理系统
  • 在GIS 工作流中实现数据处理(4)
  • 用Java实现常见排序算法详解