SpringBoot解决跨域问题,什么是跨域问题

目录

什么是跨域

配置文件解决跨域问题

注解解决跨域问题

拦截器解决跨域问题

过滤器实现

使用ResponseBodyAdvice


什么是跨域

协议://域名:端口

一个不一样就是跨域

在浏览器的同源策略中,如果两个网页的协议(例如,http 或 https)、端口(例如,80 或 443)或域名(例如,example.com)中有任何一个不同,那么这两个网页就被认为是不同源的。这就意味着,一般情况下,一个网页无法获取或操作另一个源的资源。

 

这种限制是出于安全考虑。如果没有同源策略,一个恶意网站可能会试图通过脚本来读取或修改另一个网站的数据,这会导致严重的安全问题。

 

然而,有时我们需要让一个网页可以访问另一个源的资源。这时,我们就需要使用跨源资源共享(CORS)机制。通过设置 HTTP 响应头,服务器可以告诉浏览器,它允许哪些源的网页访问它的资源。

配置文件解决跨域问题

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 CorsConfig implements WebMvcConfigurer {/*** 开启跨域*/@Overridepublic void addCorsMappings(CorsRegistry registry) {// 设置允许跨域的路由registry.addMapping("/**")// 设置允许跨域请求的域名.allowedOriginPatterns("*")// 是否允许证书(cookies).allowCredentials(true)// 设置允许的方法.allowedMethods("*")// 跨域允许时间.maxAge(3600);}
}

注解解决跨域问题

@CrossOrigin("*")

 加在方法或类上

拦截器解决跨域问题

@Component
public class CorsInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "authorization, content-type");return true;}
}

过滤器实现

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration // 一定不能忽略此注解
public class MyCorsFilter {@Beanpublic CorsFilter corsFilter() {// 1.创建 CORS 配置对象CorsConfiguration config = new CorsConfiguration();// 支持域config.addAllowedOriginPattern("*");// 是否发送 Cookieconfig.setAllowCredentials(true);// 支持请求方式config.addAllowedMethod("*");// 允许的原始请求头部信息config.addAllowedHeader("*");// 暴露的头部信息config.addExposedHeader("*");// 2.添加地址映射UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();corsConfigurationSource.registerCorsConfiguration("/**", config);// 3.返回 CorsFilter 对象return new CorsFilter(corsConfigurationSource);}
}

使用ResponseBodyAdvice

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写(通过此方法可以选择性部分控制器和方法进行重写)* 返回 true 表示重写*/@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}/*** 方法返回之前调用此方法*/@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {// 设置跨域response.getHeaders().set("Access-Control-Allow-Origin", "*");return body;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/1162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法刷题 | 回溯思想 06】4.17(子集、子集||)

文章目录 9.子集9.1题目9.2解法:回溯9.2.1回溯思路(1)函数返回值以及参数(2)终止条件(3)遍历过程 9.2.2代码实现 10.子集 ||10.1题目10.2解法:回溯10.2.1回溯思路10.2.2代码实现 9.子…

(2022级)成都工业学院数据库原理及应用实验五: SQL复杂查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询: 1、查询医生…

C++ 抽象

关键字:virtual 在C中可以使用关键字 virtual将函数声明为抽象函数,从而对类进行抽象;至少有一个成员函数为抽象函数的类将被视为抽象类。抽象类无法进行实例化,因而抽象类在C中一般是为了给其他类提供一个可以继承的适当的基类作…

DSSAT作物模型建模方法与进阶基于Python语言快速批量运行DSSAT模型及交叉融合、扩展应用技术应用

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decisi…

React Flow浏览器默认事件失效问题解决

前情提要 React Flow可以使用滑轮来实现对于该部分区域的放大和缩小,并且自动拦截浏览器默认的滑轮和滑轮按键组合事件,如:Ctrl鼠标滑轮事件。那么这就导致在非该区域的地方使用了浏览器默认的滑轮事件且改变了原有页面的大小时,…

libftdi1学习笔记 8 - MPSSE SPI优化速度

之前用GPIO模拟SPI速度有点慢,加上直接发送字节的方式实现SPI。 1. IO的定义 如果不使用模拟的方式,则SCK,MOSI,MISO必须固定。通过这3个IO判断是哪种模式 if(spi[port].sck ! 0 || spi[port].mosi_io0 ! 1 || spi[port].miso_…

basic_string_view解析

src\rttr\string_view.h 对github项目rttr&#xff08;C反射库&#xff09;解析&#xff0c;链接&#xff1a;https://github.com/rttrorg/rttr template<typename CharT, typename Traits std::char_traits > class basic_string_view 私有成员变量 const value_ty…

安卓官方例程

https://learn.microsoft.com/zh-cn/shows/connecton-demand/202?sourcerecommendations https://learn.microsoft.com/zh-cn/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?viewvs-2022 https://learn.microsoft.com/zh-cn/shows/xamari…

pta L1-063 吃鱼还是吃肉

L1-063 吃鱼还是吃肉 分数 10 全屏浏览 切换布局 作者 陈越 单位 浙江大学 国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤&#xff1b;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重&#xff0c;给出补充营养的…

Abstract Factory抽象工厂模式详解

模式定义 提供一个创建一系列相关或互相依赖对象的接口&#xff0c;而无需指定它们具体的类。 代码示例 public class AbstractFactoryTest {public static void main(String[] args) {IDatabaseUtils iDatabaseUtils new OracleDataBaseUtils();IConnection connection …

前端页面助手 (vue)

快速开发页面&#xff08;图形化开发页面&#xff09; 自主编辑 然后自己也可以修改属性 最后导出页面即可 github地址 ;https://github.com/opentiny/tiny-engine

图灵奖简介及2023年获奖者Avi Wigderson的贡献

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 2023年的…

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力&#xff0c;共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后&#xff0c;广州、珠海、北京多地政府纷纷同步出台了多项细化政策&#xff0c;广州最高支持额度高达50亿元&#xff0c;全链条为生物医药产业提供资金支持&#xff…

service-mesh

01 架构的发展历史 1.1单机小型时代 1.2 垂直坼分 1.3 集群化负载均衡架构 用户量越来越大&#xff0c;就意味着需要更多的小型机&#xff0c;但是小型机价格昂贵&#xff0c;操作维护成本高。 此时更优的选择是采用多个 pc 机部署同一个应用的方案&#xff0c;但是此时就需…

P1039 [NOIP2003 提高组] 侦探推理

注意换行符&#xff01;&#xff01;&#xff01; 如果你使用getchar()系列函数读入&#xff0c;并且用换行符判定是否结束&#xff0c;则换行符会导致你WA掉&#xff01; linux下换行符为’\n’&#xff0c;windows下换行符为’\r\n’&#xff0c;如果数据是windows下造的&a…

单片机小项目——直流电机+按键

利用普中单片机的代码实现在按下第k个独立按键时&#xff0c;直流电机运作k秒 #include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit DC_MotorP1^0; //定义独立按键控制脚 sbit KEY1P3^1; sbit KEY2P3^0; sb…

代码学习记录45---单调栈

随想录日记part45 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.17 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;每日温度 &#xff1b;下一个更大元素 I 739. 每日温度 496.下一个更大元素 I Topic…

【力扣】55. 跳跃游戏 - 力扣(LeetCode)

Problem: 55. 跳跃游戏 记录自己解答的思路和代码 文章目录 问题思路复杂度Code 问题 思路 这个题的主要思路就是先找到0对应的位置&#xff0c;然后标记起来对应left&#xff0c;如果只有一个零&#xff0c;只需要left后面的数中有>1的数就能跳过去&#xff0c;如果是00&a…

静态成员与友元,内部类初识

一.静态成员 1.静态成员变量 &#xff08;1&#xff09;定义&#xff1a; 类的定义中以静态声明的变量 &#xff08;2&#xff09;写法&#xff1a; static 变量声明 &#xff08;3&#xff09;注意&#xff1a; 静态成员变量不在对象中&#xff0c;在静态区&#xff0c…

ROS仿真小车(二)——添加摄像头雷达传感器

文章目录 前言一、在 Rviz 中显示一个盒状机器人1.1 创建ROS功能包1.2 在 launch 文件中集成 URDF 与 Rviz1.3 在 Rviz 中显示机器人模型1.4 优化 rviz 启动 二、创建一个四轮圆柱状机器人模型2.1 配置urdf和launch文件2.2 URDF优化_xacro2.2.1 配置xacro文件2.2.2 编写 Xacro …