SpringBoot学习之应用开发篇(二)1.9 处理跨域请求

目录

一、处理跨域请求

1、跨域描述

2、引入pom.xml

3、配置hosts文件

4、测试代码

5、@CrossOrigin注解说明

6、参考文档


一、处理跨域请求

1、跨域描述

说明:严格的说,浏览器并不是拒绝所有的跨域请求,实际上拒绝的是跨域的读操作
① 通常浏览器允许进行跨域写操作(Cross-origin writes),如链接,重定向;
② 通常浏览器允许跨域资源嵌入(Cross-origin embedding),如 img、script 标签;
③ 通常浏览器不允许跨域读操作(Cross-origin reads)。*

Q:什么情况才算作跨域?
A:非同源请求,均为跨域。名词解释:同源 —— 如果两个页面拥有相同的协议(protocol),端口(port)和主机(host),那么这两个页面就属于同一个源(origin)。

Q:为什么有跨域需求?
A:场景 —— 工程服务化后,不同职责的服务分散在不同的工程中,往往这些工程的域名是不同的,但一个需求可能需要对应到多个服务,这时便需要调用不同服务的接口,因此会出现跨域。

2、引入pom.xml

说明:前面章节这些包已经引用过

<!-- 启动控制,web项目必须引入的 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring用于支持HTML,静态等文件和页面展示 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3、配置hosts文件

在windows环境测试下,编辑C:\Windows\System32\drivers\etc目录下的hosts文件,如下图

域名可按照自己设定的写

4、测试代码

在org.springboot.springboot01.controller包下,创建CrossOriginController类

package org.springboot.springboot01.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class CrossOriginController {
    private static final Logger log = LoggerFactory.getLogger(CrossOriginController.class);

    @RequestMapping("index")
    public String index () {
        log.debug("进入index方法");
        return "index_hello";
    }

    @RequestMapping("forbidCross")
    @ResponseBody
    public String forbidCross(){
        return "禁止跨域";
    }

    @RequestMapping("allowCross")
    @ResponseBody
    @CrossOrigin(value = "*") // *表示所有域都支持
    public String allowCross(){
        return "允许跨域";
    }
}

在resources/templates下,新增index_hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跨域测试</title>
    <script src="http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<div id="hello"></div>
</body>
<script>
    $(function () {
        // http://www.test.com:8080/springboot/forbidCross
        $.get("http://www.test.com:8080/springboot/allowCross", function (data) {
            $("#hello").text(data);
        })
    })
</script>
</html>

① 当html中使用的是:http://www.test.com:8080/springboot/forbidCross地址,对应的是不支持跨域的,就无法显示其内容。

② 当html中使用的是:http://www.test.com:8080/springboot/allowCross地址,对应的是可支持跨域的,会显示其内容。

5、@CrossOrigin注解说明

属性含义
value指定所支持域的集合,*表示所有域都支持,默认值为*。这些值对应HTTP请求头中的Access-Control-Allow-Origin
origins同value
allowedHeaders允许请求头中的header,默认都支持
exposedHeaders响应头中允许访问的header,默认为空
methods支持请求的方法,比如GETPOSTPUT等,默认和Controller中的方法上标注的一致。
allowCredentials是否允许cookie随请求发送,使用时必须指定具体的域
maxAge预请求的结果的有效期,默认30分钟

6、参考文档

https://www.cnblogs.com/magicg/p/13670412.html

https://mrbird.cc/Spring-Boot-Deal-CORS.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值