Java中的跨域和@CrossOrigin注解的作用详解

 更新时间:2023年12月05日 08:32:43   作者:铁汉柔情li  
这篇文章主要介绍了Java中的跨域和@CrossOrigin注解的作用详解,跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制,需要的朋友可以参考下

什么是跨域

在Controller中看到@CrossOrigin ,这是什么?有什么用?为什么要用?

@CrossOrigin是用来处理跨域请求的注解

先来说一下什么是跨域:

(站在巨人的肩膀上)

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。

所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:

  • //www.123.com/index.html 调用 //www.123.com/server.PHP (非跨域)
  • //www.123.com/index.html 调用 //www.456.com/server.php (主域名不同:123/456,跨域)
  • //abc.123.com/index.html 调用 //def.123.com/server.php(子域名不同:abc/def,跨域)
  • //www.123.com:8080/index.html调用 //www.123.com:8081/server.php(端口不同:8080/8081,跨域)
  • //www.123.com/index.html 调用 https://www.123.com/server.php(协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

当域名www.abc.com下的js代码去访问www.def.com域名下的资源,就会受到限制。

@CrossOrigin可以处理跨域请求,让你能访问不是一个域的文件。

跨域(CORS)支持

Spring Framework 4.2 GA为CORS提供了第一类支持

使您比通常的基于过滤器的解决方案更容易和更强大地配置它

所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin

使用方法简介说明

controller中配置CORS

我们可在@RequestMapping注解的上面添加一个@CrossOrigin注解

 则可启用CORS(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法)

例:

@RestController
public class TestController {
    @CrossOrigin
    @PostMapping("/test/addRecord")
    public CommonResult<Integer> add(@RequestBody TestController oneRecord) {
       // ...
    }
    @GetMapping("/test/checkRecord")
    public CommonResult<TestController> checkRecord(@RequestParam Integer recordId) {
        // ...
    }
}

@CrossOrigin注解是干什么用的

@CrossOrigin是一个Java注解,用于指示浏览器允许跨域请求资源。在Web应用程序中,如果JavaScript代码试图从一个域名获取来自不同域名的资源,这将会触发浏览器的同源策略,从而导致浏览器阻止跨域请求。使用@CrossOrigin注解可以允许浏览器绕过同源策略,从而允许跨域请求。

@CrossOrigin注解可以用于类级别或方法级别,如果用于类级别,将适用于整个类中的所有方法。它接受一些参数,包括:

  • origins:指示允许跨域请求的来源。默认情况下,它是"*",表示允许来自任何来源的跨域请求。
  • methods:指示允许的HTTP方法。默认情况下,它包括GET、HEAD和POST。
  • maxAge:指示浏览器可以缓存预检请求的时间(以秒为单位)。
  • allowedHeaders:指示允许的请求头。
  • exposedHeaders:指示可以访问响应头的列表。

总之,使用@CrossOrigin注解可以解决跨域请求的问题,使得Web应用程序能够更灵活地使用跨域资源。

优缺点分析

使用@CrossOrigin注解可以解决跨域请求的问题,从而使Web应用程序能够更灵活地使用跨域资源。下面是@CrossOrigin注解的一些优缺点:

优点:

使得Web应用程序能够更灵活地使用跨域资源,提高了开发效率。允许跨域请求,使得多个域之间的交互更加便利。可以控制允许的请求来源、请求方法、请求头等,从而增强了安全性。

缺点:

允许跨域请求可能会导致一些安全风险,例如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。使用@CrossOrigin注解可能会使代码更难以维护和测试,因为它可能会增加代码的复杂度。在处理跨域请求时,可能会出现性能问题,因为浏览器需要进行额外的预检请求。

总之,@CrossOrigin注解的使用需要在安全性和开发效率之间做出权衡,开发人员需要根据具体情况进行选择和配置。

其他推荐解决跨域方法的选择

Java处理跨域问题的方法有很多种,下面列举几种常用的方法:

  • 使用@CrossOrigin注解:如前面所述,可以使用@CrossOrigin注解来允许跨域请求。
  • 使用Filter过滤器:使用Filter过滤器可以拦截所有请求并添加响应头,从而允许跨域请求。在Filter过滤器中,可以设置允许的请求来源、请求方法、请求头等。
  • 使用代理服务器:使用代理服务器可以将跨域请求发送到代理服务器,代理服务器再将请求发送到目标服务器,并将响应返回给浏览器。在这个过程中,浏览器只与代理服务器通信,避免了跨域问题。
  • 使用JSONP技术:JSONP是一种在客户端使用的跨域技术,它允许在不受同源策略限制的情况下获取跨域资源。在Java中,可以通过返回一个JavaScript函数调用来实现JSONP。
  • 使用WebSocket协议:WebSocket是一种新型的协议,可以在浏览器和服务器之间建立双向通信的连接。使用WebSocket协议可以避免跨域问题,并且可以实现实时通信等功能。

总之,Java处理跨域问题的方法有很多种,开发人员需要根据具体情况选择合适的方法。在使用这些方法时,需要注意安全性和性能等方面的问题。

到此这篇关于Java中的跨域和@CrossOrigin注解的作用详解的文章就介绍到这了,更多相关跨域和@CrossOrigin注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • BeanFactory与ApplicationContext的区别示例解析

    BeanFactory与ApplicationContext的区别示例解析

    这篇文章主要为大家介绍了BeanFactory与ApplicationContext的区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringBoot调用外部接口的几种方式

    SpringBoot调用外部接口的几种方式

    SpringBoot应用中,调用外部接口是微服务架构常见需求,本文主要介绍了SpringBoot调用外部接口的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Java实现对象列表导出为excel表格的实用工具类

    Java实现对象列表导出为excel表格的实用工具类

    这篇文章主要为大家详细介绍了Java如何实现对象列表导出为excel表格的实用工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • spring状态机模式使用小结

    spring状态机模式使用小结

    说起Spring状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring状态机就是状态模式的一种实现,在介绍Spring状态机之前,让我们来看看设计模式中的状态模式,需要的朋友可以参考下
    2024-04-04
  • Java设计模式之职责链模式详解

    Java设计模式之职责链模式详解

    Java设计模式中有很多种类别,例如单例模式、装饰模式、观察者模式等。本文将为大家详细介绍其中的职责链模式,感兴趣的可以了解一下
    2021-12-12
  • Java那些鲜为人知的关键字volatile详析

    Java那些鲜为人知的关键字volatile详析

    这篇文章主要给大家介绍了关于Java那些鲜为人知的关键字volatile的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 如何在Maven项目配置pom.xml指定JDK版本和编码

    如何在Maven项目配置pom.xml指定JDK版本和编码

    maven是个项目管理工具,如果我们不告诉它要使用什么样的jdk版本编译,它就会用maven-compiler-plugin默认的jdk版本来处理,这样就容易出现版本不匹配的问题,这篇文章主要给大家介绍了关于如何在Maven项目配置pom.xml指定JDK版本和编码的相关资料,需要的朋友可以参考下
    2024-01-01
  • 一文详解Springboot集成mybatis-plus

    一文详解Springboot集成mybatis-plus

    这篇文章主要介绍了Mybatis-Plus与SpringBoot整合,并在项目中实战运用,列举其增删改查的使用方式,对学习或工作有一定的帮助,需要的小伙伴可以参考阅读
    2023-04-04
  • 简单的理解java集合中的HashSet和HashTree几个重写方法

    简单的理解java集合中的HashSet和HashTree几个重写方法

    这篇文章主要介绍了简单的理解java集合中的HashSet和HashTree几个重写方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java按值传递和按址传递(面试常见)

    Java按值传递和按址传递(面试常见)

    这篇文章主要介绍了Java按值传递和按址传递(面试常见)知识,在面试笔试题中经常会遇到,今天小编给大家详细介绍下,需要的朋友可以参考下
    2017-02-02

最新评论