当前位置:网站首页 > Java基础 > 正文

跨域解决方案(跨域解决方案java)



pom.xml

application.properties

至此我们就提供了一个接口:http://localhost:8080/crossServer/cross/request

pom.xml

application.properties

至此我们就提供了一个接口:http://localhost:8081/crossWeb/test/request,访问此页面可以打开如下测试页面:

在没有任何跨域处理的情况下,我们点击按钮,发起请求,得到结果如下:

请求地址 说明 是否跨域 http://www.alian.com/a
http://www.alian.com/b 同 域名 否 http://www.alian.com/a/b
http://www.alian.com/c/d 同域名不同文件夹 否 http://www.alian.com/a
https://www.alian.com/a
同域名不同协议 http://www.alian.com/a
http://www.alian.com:8080/a
同域名下不同端口 http://www.alian.com/a
http://yun.alian.com/a
同顶级域名不同二级域名 http://www.alian.com/a
http://www.yang.com/a
不同域名 http://www.alian.com/a
http://10.130.1.88:80/a
域名和对应的ip

最简单的方式是通过使用注解@CrossOrigin,但是需要注意的是这个注解版本,这个注解是从Spring Framework 4.2 GA开始有的。如果你项目的版本低于这个版本是用不了的。

为了避免方法间相互影响,我们先在我们的方法crossRequest,去除注解@CrossOrigin(origins = “*”),后面也是一样就不一一提示了。

上面是对全部方法都支持跨域,我们也可以指定某个请求支持跨域,如下:

再没有使用以上方式解决跨域的情况下,我们使用过滤器也可以实现。

上面是对所有域名请求都支持跨域,我们也可以指定某个域名,意思就是只有指定域名可以跨域请求。比如:我们只允许http://localhost:8081的跨域请求。

在没有使用以上方式解决跨域的情况下,我们通过Response对象也可以实现跨域。

如果是嫌上述方法在每个方法里都要设置response.setHeader(“Access-Control-Allow-Origin”, “*”),那就可以统一处理返回。可以利用@ControllerAdvice和ResponseBodyAdvice通知完成。

  • supports:判断是否要交给 beforeBodyWrite 方法执行,ture:需要;false:不需要
  • beforeBodyWrite:对 response 进行具体的处理

可能还有些老系统spring版本是Spring Framework 4.2 GA之前的,比如3.X。可能上面有些方式也用不了,比如注解。这里我们可以使用jsonp方式,这里我们先改下我们的前端和后端。

3.6.1、后端

在之前的控制层增加一个接口jsonpRequest

这里需要注意的两个点:

  • 一个是请求的方法得支持GET方法(@RequestMapping就是POST、GET都支持)
  • 返回的结果转为json字符串,作为回调方法的参数

3.6.2、前端方法一

对应前端第一种方法是jsonp约定俗成的默认值为callback

  • dataType:该参数必须要设置成jsonp
  • jsonp:该参数的值需要与服务器端约定(默认值为callback
  • 成功进入到success

所以我的后端接口就有一个参数接收

3.6.3、前端方法二

假设你不想用默认的方法,比如方法名占用了,怎么办呢?那就像下面这样自定义方法名:

  • 首先你得指定你的jsonp方法,比如我这里是jsonpCallBack,也就是回调方法
  • 同时我们请求里需要把回调方法名传递到后台,比如我这里callback=jsonpCallBack
  • 回调就会直接进入到我们的jsonpCallBack方法

jsonpCallBack是自定义方法名,你也可以改成其他的名字,记得请求参数,请求地址,及其方法定义,三个一起改哦。

两者的结果如下:

跨域是浏览器的行为,跨域问题其实就是浏览器的同源策略所导致的,所以后端就没有跨域一说了。以上几种跨域解决方法单独用一个就行了,尽量不要混用,以免出现其他重复冲突的问题。还有其他一些通过nginx或者网关等方法都可以解决跨域问题,就不一一介绍了。

以上就是Java实现后端跨域的常见解决方案的详细内容,更多关于Java后端跨域的资料请关注脚本之家其它相关文章!

到此这篇跨域解决方案(跨域解决方案java)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 学java推荐的书和网站(学java看的书)2025-08-07 12:09:04
  • java调用dll动态库里的方法(java jni调用dll)2025-08-07 12:09:04
  • java内存模型和java内存结构(java内存模型happens before)2025-08-07 12:09:04
  • java基础面试题库(java基础面试题库及答案)2025-08-07 12:09:04
  • 若依文件上传从后端限制文件类型(java后端上传文件类型限制)2025-08-07 12:09:04
  • java在哪个网站自学(java自学app)2025-08-07 12:09:04
  • java和爬虫有什么区别(python爬虫和java爬虫性能比较)2025-08-07 12:09:04
  • java内存模型和java内存结构(java内存模型的理解)2025-08-07 12:09:04
  • java面试基础题目(java面试基础笔试题)2025-08-07 12:09:04
  • tcpdump java(tcpdump java解析)2025-08-07 12:09:04
  • 全屏图片