Spring解决跨域问题(@CrossOrigin)

Spring学习笔记_50——@CrossOrigin CrossOrigin是Spring Framework中的一个注解,用于处理跨域资源共享(Cross-Origin Resource Sharing, CORS)问题。 阅读详情

一、关于跨域介绍

在前后分离的架构下,跨域问题难免会遇见比如,站点 http://domain-a.com 的某 HTML 页面通过 的 src 请求 http://domain-b.com/image.jpg。网络上的许多页面都会加载来自不同域的CSS样式表,图像和脚本等资源。

出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非使用CORS头文件。

跨域的体现,在于它的域名不同或者端口不同,但要注意以下的形式为非跨域模式
http://www.example.com/index.html ==> http://www.example.com/login.html


二、Spring解决跨域问题(@CrossOrigin)

1、@CrossOrigin使用场景要求

  • jdk1.8+
  • Spring4.2+

2、@CrossOrigin源码解析(翻译参考网络,文末列出参考地址)

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {

    String[] DEFAULT_ORIGINS = { "*" };

    String[] DEFAULT_ALLOWED_HEADERS = { "*" };

    boolean DEFAULT_ALLOW_CREDENTIALS = true;

    long DEFAULT_MAX_AGE = 1800;


    /**
     * 同origins属性一样
     */
    @AliasFor("origins")
    String[] value() default {};

    /**
     * 所有支持域的集合,例如"http://domain1.com"。
     * <p>这些值都显示在请求头中的Access-Control-Allow-Origin
     * "*"代表所有域的请求都支持
     * <p>如果没有定义,所有请求的域都支持
     * @see #value
     */
    @AliasFor("value")
    String[] origins() default {};

    /**
     * 允许请求头重的header,默认都支持
     */
    String[] allowedHeaders() default {};

    /**
     * 响应头中允许访问的header,默认为空
     */
    String[] exposedHeaders() default {};

    /**
     * 请求支持的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。
     * 默认支持RequestMapping中设置的方法
     */
    RequestMethod[] methods() default {};

    /**
     * 是否允许cookie随请求发送,使用时必须指定具体的域
     */
    String allowCredentials() default "";

    /**
     * 预请求的结果的有效期,默认30分钟
     */
    long maxAge() default -1;
}

3、@CrossOrigin的使用

/**
 * @Title: UserController
 * @ProjectName demo
 * @Description: 请求处理控制器
**/
@RestController
// 实现跨域注解
// origin="*":代表所有域名都可访问
// maxAge:简单来说就是Cookie的有效期,单位为秒
// 若maxAge是负数,则代表为临时Cookie,不会被持久化,Cookie信息保存在浏览器内存中,浏览器关闭Cookie就消失
@CrossOrigin(origins = "*", maxAge = 3600)
public class UserController {
    @Resource
    private IUserFind userFind;

    @GetMapping("/finduser")
    public User finduser(@RequestParam(value="id") Integer id){
        //此处省略相应代码
    }
}

正常调用:
这里写图片描述

前端跨域请求:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>demo</title>
        <script type="text/javascript" src="js/jquery-3.3.1.min.js" ></script>
    </head>
    <body>
        <input type="button" value="测试" onclick="ajaxloding()" />
        <div id="usermessage"></div>
        <script>
            var getdata=0;
            function ajaxloding(){
                $.ajax({
                    async:false,
                    type:"get",
                    url:"http://localhost:8080/api/finduser?id=1",
                    contentType: "application/x-www-form-urlencoded",
                    dataType: "json",
                    data: {},
                    success:function(result){
                        getdata=result.name
                    },
                    error: function (errorMsg) {
                        //请求失败时执行该函数
                        alert("请求数据失败!");
                    }
                });
                $("#usermessage").text(getdata)
            }
        </script>
    </body>
</html>

这样就解决了跨域问题,获取了后台的数据:
这里写图片描述

转载自《SpringBoot解决CORS跨域(@CrossOrigin)》

@CrossOrigin注解的使用指南 CrossOrigin注解是Spring框架提供的一种注解,用于配置CORS策略。通过在控制器类或方法上添加@CrossOrigin注解,我们可以指定哪些来源可以访问该类或方法,从而实现对CORS的简化配置。@CrossOrigin注解支持多种配置选项,例如允许特定来源、允许所有来源、指定请求头和响应头等。 阅读详情

相关推荐

【云原生】 Spring Cloud Alibaba 之 Gateway 服务网关跨域问题

Spring Cloud Alibaba Gateway 跨域问题如何解决? 一招教你搞定!

wanghuichen的博客 5698

注解@CrossOrigin详解

注解@CrossOrigin 出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。 跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或JSONP。 一、跨域(CORS)支持: Spring Framework

诚的博客 11万+

Spring @CrossOrigin 注解原理实现

主要介绍了Spring @CrossOrigin 注解原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

@CrossOrigin及其实现跨域原理

一、关于什么是跨域及解决方法看这篇文章 文章 二、关于@CrossOrigin 简单请求和非简单请求 对于简单请求(GET,HEAD,POST),浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个Origin字段。 非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为预检请求 (preflight) @Cro

cristianoxm的博客 9907

电流模架构Bandgap设计与仿真

带隙基准作为集成电路中一个重要模块,被广泛应用在低压差线性稳压(LDO)、充电电池保护芯片和通信电路、射频收发器、flash存储器等多种模拟及数模混合集成电路中,并且是片上集成系统(SOC)芯片中不可或缺的部分,为整个芯片提供精确的电压参考点............

qq_50968231的博客 5万+

QoderWake 与 Qoder 工具生态详解

Qoder CLIQoder SDKQoderWake谁在用你(开发者)你的程序你的数字员工谁在跑你的终端会话你的应用进程Daemon 后台进程什么时候跑你启动时你的代码调用时7×24 持续运行怎么触发键盘输入函数调用定时/事件/API/IM有记忆吗会话级 + 文件无多层持久记忆能协作吗Subagent多 Waker + IM 群组核心价值编码效率集成灵活性自主生产力一句话总结。

驽马不舍 948

Spring @CrossOrigin 通配符 解决跨域问题

@CrossOrigin 通配符 解决跨域问题 痛点: 对很多api接口需要 开放H5 Ajax跨域请求支持 由于环境多套域名不同,而CrossOrigin 原生只支持* 或者具体域名的跨域支持 所以想让CrossOrigin 支持下通配 *.abc.com 支持所有origin 为 abc.com域(包括各种子域名)名来的Ajax 请求支持跨域. 解决思路: 支持通配 @CrossOr...

weixin_30271335的博客 1640

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 287

Spring框架:跨域问题之使用@CrossOrigin注解解决失败的原因总结

问题描述:跨域问题 解决方案: 在Spring框架4.2版本后,Spring给出了注解的方式解决问题。 即在Controller控制器中,在Controller注解上方添加@CrossOrigin注解。 但是使用这种方式后也有可能仍然出现跨域问题,解决方案之一就是: 在@RequestMapping注解中没有指定Get、Post方式,具体指定后,问题解决

孙雪峰 4万+

海康工业相机排雷笔记02-像素格式解析

工业相机使用过程记录 02-像素格式解析 通过将相机输出图像裸数据raw格式直接存图查看 一、黑白/Mono 直接使用相机测试图像存图: 图像中各部分灰度分别为:0、36、73、109、146、182、219、255,以灰度73列为例 (1)Mono 8 该列图像数据为十六进制49,十进制为73,那么Mono 8就是每个像素点占8bit,依次排列。 (2)Mono 10 该列图像数据为十六进制2401,由于相机均为小端数据,实际数据应解析为0124,十进制为292=73*4,那么Mono 10格式为每

yonghuming_66的博客 8356

IEEE Access 上岸指南,附含泪整理的 cover letter 、沟通邮件、终版文档等资料包

终于上岸了! 我是一个小硕,本科期间发表过两篇水文,奈何学校有更高的毕业要求,只能硬着头皮尝试一下 SCI。 想投 IEEE Access 的朋友都应该知道 小木虫论坛 对这个期刊的讨论,褒贬不一,有的人说是大水刊,有的人说有难度。 比如: @wow_: 不可否认,灌水期刊。只要之前中过一篇,再投基本没有不录用的!我们实验室其他老师说过一区除外的收费期刊都应该禁止灌水。 @pssp: 审稿人还...

kurryluo的博客 1万+

Spring @CrossOrigin快速解决接口跨域问题(包含Springboot方式)

出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。 跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或...

纸上得来终觉浅,绝知此事要躬行 3019

11n、11ac、11ax和11be MCS表(全网最全)

1、无线协商速率介绍及计算 2、附11n、11ac、11ax 完整MCS速率表

weixin_41500064的博客 2万+

注解@CrossOrigin解决跨域问题

转自: 注解@CrossOrigin解决跨域问题 阅读目录: 一、跨域(CORS)支持: 二、使用方法: 1、controller配置CORS 2、全局CORS配置 3、XML命名空间 4、How does it work? 5、基于过滤器的CORS支持 三、spring注解@CrossOrigin不起作用的原因 四、参考文章:   阅读正文: 注解@Cro...

无知人生,记录点滴 1万+

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

解决同源策略跨域问题:Spring注解@CrossOrigin

解决方法 不多BB,先放解决方案 在Controller上加个Spring的注解@CrossOrgin即可 (其实也可以通过添加代理来解决,最初我写React时的解决方案是为前端添加了代理) 什么是同源策略 会有人在自己写前后端的时候,前端后端运行在自己电脑的不同端口,前端向后端发请求时就会出现由于“同源策略”而请求失败问题(我刚学前端写React的时候就遇到过) 那么什么是同源策略呢 网上的解释...

小枫哥的博客 598

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring框架:跨域问题之使用@CrossOrigin注解解决失败

出现原因,首先会发送一个OPTIONS请求给后台 ,这里不知道的可以百度 我这里用了@CrossOrigin不知道,为什么还是报跨域 后来看前端错误信息 Access to XMLHttpRequest at ‘http://localhost:8080/user/login’ from origin ‘http://localhost:9999’ has been blocked by CORS policy: Request header field content-type is not allow.

qq_41183828的博客 717

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Spring Boot项目中解决跨域问题(四种方式)

当一个浏览器的两个tab页中分别打开来自百度和谷歌的页面,当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。有四种方法解决跨域。我们还可以在Network里看到,浏览器在发送我们输入的用户名,密码等数据之前,还发送了一次OPTIONS的请求,这是浏览器自动发送的,为了验证是否允许跨域访问。*,这个在开发测试的时候可以这么设置,但如果是生产环境,建议不要设置成*,最好是允许哪些域名访问就设置哪些,毕竟限制域名还是很有必要的。

2509_93956183的博客 906

使用@CrossOrigin实现跨域请求

在Spring MVC4.2之后推出了@CrossOrigin注解来解决跨域问题,而在4.2之前我们都是通过定义注册过滤器的方式来解决跨域与问题的,所以在Spring4.2以后使用@CrossOrigin能一定程度上的简化解决跨域问题的方式。接下来我们就来介绍@CrossOrigin方式以及使用时的一些注意点@CrossOrigin 会启用CORS  控制器方法CORS配置因此,RESTful W...

tengxvincent的博客 1万+

@CrossOrigin解决跨域问题

跨域 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。 如下所示 域名: 主域名不同 http://www.baidu.com/index.html -->http://www.sina.com/test.js 子域名不同 http://www.666.baidu.com/index.html –>http://www.555.baidu.com/test.js 域名和域名ip http://www.baidu.com/index.html –>htt

matthewchen123的博客 4945

Java跨域原因和跨域解决

跨域:浏览器对于javascript的同源策略的限制 。 以下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 其他:协议不同如http和https 跨域前端显示 Spring提供了解决方案,我们只需要在对应controller上添加一个标签就可以了@CrossOrigin ...

IT_littlewhite的博客 542
上一篇: SpringBoot之RabbitMQ的消息发布与接收(Docker)
下一篇: SpringMVC之@RequestBody
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值