Java中解决跨域的几种方法

一、 什么是跨域(同源策略)

同源的定义:如果两个页面的协议,端口(如果有指定)和主机都相同,则两个页面具有相同的源
1,用户在浏览器输入的URL中包含的协议、域名、端口都完全相同。如果有一项不同,浏览器会觉得有安全问题,从而产生跨域问题。,

2,如果使用Postman等开发工具进行交互是不会出现跨域问题,这是浏览器特有的限制。
在后端服务添加CORS策略的配置就可以解决跨域问题。

一,Spring Cloud Gateway 跨域配置 

spring: cloud:gateway:globalcors:cors-configurations:'[/**]':  # 允许跨域的源(网站域名/ip),设置*为全部allow-credentials: trueallowed-origins: #起源- "http://xb.abc.com"- "http://sf.xx.com"allowed-headers: "*"  # 允许跨域请求里的head字段,设置*为全部allowed-methods:  # 允许跨域的method, 默认为GET和OPTIONS,设置*为全部- OPTIONS- GET- POST- DELETE- PUT- PATCHmax-age: 3600

二,Spring boot项目

1,使用@CrossOrigin注解 (局部跨域)

在支持跨域的方法或类上添加@CrossOrigin注解

@CrossOrigin(origins = "*")

2,重写 WebMvcConfigurer(全局跨域)

 Spring boot项目更便捷的方式,实现WebMvcConfigurer接口中的addCorsMappings方法。

 
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")//放行哪些原始域.allowedOrigins("*").allowedHeaders("*")// 是否发送Cookie.allowCredentials(true).allowedMethods("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH").maxAge(3600);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}

三,反向代理服务器

使用反向代理服务器可以将前端请求转发到后端服务器,从而绕过跨域限制。以下是反向代理服务器的示例代码:
这里nginx是要和你的前端服务在一台服务器上的,然后你访问的时候通过前端的nginx进行转发的后端服务器才行 

 NGINX反向代理配置示例
location /api {proxy_pass http://backend-server;
}

 四,Spring解决跨越

添加处理跨域的过滤器(CoreFilter)。

@Configuration
public class GlobalCorsConfig {@Beanpublic CorsFilter corsFilter(){CorsConfiguration config=new CorsConfiguration();//config.addAllowedOrigin("*"); -过时的//允许哪些域名访问config.addAllowedOriginPattern("*");//是否允许前端传递验证信息   cookieconfig.setAllowCredentials(true);//允许所有的方法  POST GET ...config.addAllowedMethod("*");//允许哪些请求头config.addAllowedHeader("*");//暴露哪些头部信息config.addExposedHeader("*");//设置允许哪些接口可以被跨域访问UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**",config);return new CorsFilter(source);}
}

 

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

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

相关文章

【python005】python批量、动态调参请求接口(已更新)

1.熟悉、梳理、总结项目研发实战中的Python开发日常使用中的问题。随着版本更新,做了一些变动,如商业化限制,取消一些语法等。 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景介绍2.单次接口请求总结代码片3.批量循环接口请求总结代码片4.持久化`…

机器人流程自动化与低代码流程自动化:技术革新的双重驱动

在数字化时代的浪潮中,企业对于高效、智能的工作流程的需求日益增强。在这一背景下,机器人流程自动化(RPA)和低代码流程自动化(Low-Code Automation)应运而生,成为推动企业数字化转型的重要力量…

docker容器安装mysql

linux: centOS-7 hadoop: 3.3.6 前置章节: (图文并茂)基于CentOS-7搭建hadoop3.3.6大数据集群-CSDN博客 可选:zookeeper安装教程-CSDN博客 1.安装docker 1.1 添加docker的repo源 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/…

一个月速刷leetcodeHOT100 day08 两道DP题 一道子串

和为k的子数组 中等 提示 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: **输入:**nums [1,1,1], k 2 **输出:**2 示例 2: *…

集合、Collection接口特点和常用方法

1、集合介绍 对于保存多个数据使用的是数组,那么数组有不足的地方。比如, 长度开始时必须指定,而且一旦制定,不能更改。 保存的必须为同一类型的元素。 使用数组进行增加/删除元素的示意代码,也就是比较麻烦。 为…

一种简单实用的ollvm反混淆的方案与源码

我是一名从事反欺诈&风控&设备指纹相关的工作,最近对ollvm的如何逆向的问题进行了学习与思考。 ollvm是一个开源免费的so混淆工具,对于逆向的小白来说简直是灾难性的存在。 这个例子是超简单,我想每个人都可以学会跟掌握,…

RustGUI学习(iced/iced_aw)之扩展小部件(二十五):如何使用tab部件来创建tab多页面切换?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第二十五篇,主要讲述tab页面切换部件的使用,会结…

[linux] bash中的单引号(‘)和双引号(“)

在命令行中,单引号()和双引号(")在某些情况下会有不同的效果,尤其是在涉及bash变量和特殊字符的解析时。在你给出的两个命令中: ps -ef|grep "tokenize"|grep -v grep|awk {print $2} 和 ps -ef|grep "tokenize"…

PCL点云边界提取——源码解析

文章目录 一、概述二、PCL边缘检测源码定位过程1、初始化2、检查输入点云是否稠密3、迭代处理每个点4、输出三、修改后的过程调用一、概述 在PCL中集成了一个非常经典的点云边缘检测算法,这个算法也在 PCL点云边界提取这篇博客中讲解了。该文章只介绍了AC算法的原理及接口调用…

hook中useContext到底怎么用

语法: somecontext createContext(defaultValue); 作用: 避免了组件嵌套太深, 顶层变量层层传递的麻烦. 如何消费顶层数据 第一步: 用createContext声明一个context上下文变量 import { createContext } from react;export const GlobalContext createContext({} as any);…

面试问题小结

说说你的项目,从里面学到啥了(随便说) CAS 线程池 的各个方面 线程咋创建(4种方式) 说一下聚集索引和非聚集索引 50w男 50w女 ,在B树中咋存储的(类似下面的图,变通一下就行了&a…

本是梦中人,常作花下客。心中自往来,知我有几个。

我们总是喜欢拿“顺其自然”来敷衍人生道路上的荆棘坎坷,却很少承认,真正的顺其自然, 其实是竭尽所能之后的不强求, 而非两手一摊的不作为。 一花凋零荒芜不了整个春天, 一次挫折也荒废不了整个人生。 多年后&#x…

近临算法(个人总结版)

背景 近邻算法(Nearest Neighbor Algorithm)是一种基本但非常有效的分类和回归方法。最早由Fix和Hodges在1951年提出,经过几十年的发展和改进,已成为数据挖掘、模式识别和机器学习领域的重要工具。近邻算法基于相似性原则&#x…

通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称、用icon区分文件和文件夹等需求

目录 一、通过el-tree自定义渲染网页版工作目录 1.1、需求介绍 1.2、使用el-tree生成文档目录 1.2.1、官方基础用法 ①效果 ②代码: 1.2.2、自定义文档目录(实现鼠标悬浮显示完整名称、用icon区分文件和文件夹) ①效果(直接效…

find 几招在 Linux 中高效地查找目录

1. 介绍 在 Linux 操作系统中,查找目录是一项常见的任务。无论是系统管理员还是普通用户,都可能需要查找特定的目录以执行各种操作,如导航文件系统、备份数据、删除文件等。Linux 提供了多种命令和工具来帮助我们在文件系统中快速找到目标目…

浅谈后端整合Springboot框架后操作基础配置

boot基础配置 现在不访问端口8080 可以吗 我们在默认启动的时候访问的是端口号8080 基于属性配置的 现在boot整合导致Tomcat服务器的配置文件没了 我们怎么去修改Tomcat服务器的配置信息呢 配置文件中的配置信息是很多很多的... 复制工程 保留工程的基础结构 抹掉原始…

朴素贝叶斯+SMSSpamCollections

1. 打开 Jupyter 后,在工作目录中,新建一个文件夹命名为 Test01 ,并且在文件夹中导入数据 集。在网页端界面点击 “upload” 按钮,在弹出的界面中选择要导入的数据集。然后数据集出现 在 jupyter 文件目录中,此时…

Vue.js Promise 与 async/await 的比较

在现代 Web 开发中,异步操作是不可避免的。在处理异步数据获取时,开发人员通常会使用 Promise 或 async/await。虽然两者都可以实现相同的功能,但它们在代码风格、可读性和错误处理等方面有所不同。本文将对这两种方法进行比较,并…

初识Qt:从Hello world到对象树的深度解析

Qt中的对象树深度解析 Hello world1.图形化界面创建命令行式创建在栈上创建在堆上创建为什么传文本需要QString,std::string不行吗?那为什么要传入this指针?为什么new后不用显示调用delete函数呢,不会造成内存泄漏问题吗&#xff…

python:__class_getitem__使用以及cached_property源码分析

python:__class_getitem__使用以及cached_property源码分析 1 前言 Python中如何模拟泛型类型? 当使用类型标注时,使用 Python 的方括号标记来形参化一个 generic type 往往会很有用处。 例如,list[int] 这样的标注可以被用来表…