boot spring 跨域注解_Spring Boot 2.X优雅的解决跨域问题
发布日期:2021-10-31 12:51:57 浏览次数:6 分类:技术文章

本文共 2619 字,大约阅读时间需要 8 分钟。

一、什么是源和跨域

源(origin)就是协议、域名和端口号。

URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口全部相同,则表示他们同源。否则,只要协议、域名、端口有任何一个不同,就是跨域。

对https://www.baidu.com/index.html进行跨域比较:

URL

是否跨域

原因

https://www.baidu.com/more/index.html

不跨域

三要素相同

https://map.baidu.com/

跨域

域名不同

http://www.baidu.com/index.html

跨域

协议不同

https://www.baidu.com:81/index.html

跨域

端口号不同

随着前后端分离开发的越来越普及,会经常遇到跨域的问题,当我们在浏览器中看到这样的错误时,就需要意识到遇到了跨域:

二、什么是同源策略?

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略又分为以下两种:

DOM同源策略:禁止对不同源页面DOM 进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。

XMLHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。

三、Spring Boot跨域解决方案

本例使用Spring Boot 2.1.2.RELEASE演示,分别用8080和8081端口启动,部分代码如下:

跨域页面:testOtherDomain.html

不同域名-Java碎碎念

点我测试

$("#b1").click(function () {

$.ajax({

url: "http://localhost:8081/hello",

type: "post",

success:function (res) {

console.log(res);

}

})

});

接口类:HelloController

package com.example.helloSpringBoot.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@RequestMapping("/hello")

public String HelloSpring (){

return "hello Java碎碎念!";

}

}

未解决跨域前运行截图:

在Spring Boot 2.X应用程序中可以使用注解@CrossOrigin,也可以通过使用WebMvcConfigurer对象来定义全局CORS配置。

1、@CrossOrigin注解示例代码

package com.example.helloSpringBoot.controller;

import org.springframework.web.bind.annotation.CrossOrigin;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@CrossOrigin

@RequestMapping("/hello")

public String HelloSpring (){

return "hello Java碎碎念!";

}

}

2. WebMvcConfigurer对象示例代码

package com.example.helloSpringBoot.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration

public class MyConfiguration {

@Bean

public WebMvcConfigurer corsConfigurer() {

return new WebMvcConfigurer() {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/*")

.allowedOrigins("*")

.allowCredentials(true)

.allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")

.maxAge(3600);

}

};

}

}

按照上面两种方式的一种配置完成后,即可实现对跨域的支持,运行成功截图如下:

完整源码地址:https://github.com/suisui2019/helloSpringBoot (本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

本文标题: Spring Boot 2.X优雅的解决跨域问题

本文地址: http://www.cppcns.com/ruanjian/java/254703.html

转载地址:https://blog.csdn.net/weixin_39965881/article/details/111961081 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:学大数据要学哪些算法_学习大数据开发前需要掌握哪些技能?
下一篇:车险赔付率分析报告_车险经营情况分析报告模板.ppt

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 09时43分33秒