前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发,相比于单体项目容易产生跨域问题。

一、跨域问题CORS

1.什么是跨域问题?

后端接收到请求并返回结果了,浏览器把这个响应拦截了。

2.跨域问题是怎么产生的?

浏览器基于同源策略,如果请求的网页和当前的服务不是同源的,并且发送的是XHR(XMLHttpRequest)请求,就会产生跨域问题。

同源策略:url中的协议、域名、端口号任意一个不同就不同源。注意两个不同的域名指向同一个主机ip也叫不同源。

3.为什么要有同源策略?

CSRF攻击:借助本地浏览器缓存的cookie信息,以当前登陆者的身份模拟发送请求,完成攻击者期待的操作。当攻击者拿到管理员的信息时可能对整个web程序造成重大打击。

csrf防御:

  • 规范使用各个请求方法,比如get请求只能检索信息,不能修改信息。
  • 当用户访问站点时生成一个随机数,并设置成用户发送请求时的cookie。用户提交表单时,要携带随机数。当csrf攻击者发送请求时,由于没有这个随机数,所以请求失败。
  • 在非get请求中增加token并使用拦截器校验。
  • HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址,在访问敏感数据时,先检查referer字段,查看请求来源于哪个地址。如果是本页面的url就可以访问,如果是别的网页的url就禁止访问。
  • 自定义属性加到请求头。通过 XMLHttpRequest 这个类,一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性。
  • 客户端中RequestRodeo 工具通过在客户和服务器之间充当代理来防止CSRF攻击
  • 客户端下载某些插件,对于拦截的请求用户可以自己设置白名单。

二、解决方法

前端解决方式

1.JSONP方案:(只能解决get请求不能解决post请求)

不受同源策略影响的标签:img、script、link 、iframe

通过在前端动态创建script标签,指定跨域资源的URL,服务器返回的是一段JavaScript代码,前端通过回调函数处理数据。

2.vue解决devServer配置
module.exports = {
    devServer: {
        proxy: {
            '/api': { // 请求的代称,写在Axios里的BaseUrl
                target: 'http://localhost:8088/spring', // 真实请求URl
                ws: true,
                changeOrigin: true, // 允许跨域
                pathRewrite: { //替换,通配/api的替换成对应字符
                //     /* 重写路径,当我们在浏览器中看到请求的地址为:http://localhost:8080/api/core/getData/userInfo 时
                //       实际上访问的地址是:http://localhost:8088/spring/core/getData/userInfo,因为重写了 /api
                //      */
                    '^/api': '' //当你的接口中没有/api字眼时,采用这种,直接替换成空即可
                //     '^/api': '/api'   //当你的接口中刚好有/api 时,采用这种方式
                }
            }
        }
    }
}
3.Nginx代理

正向代理:顺着请求方向代理,由用户配置,为用户代理服务。拿到要访问的资源。

反向代理:充当响应服务器,对目标服务器提供了请求转发的功能。

nginx使用的是反向代理:浏览器访问A服务器,A服务器再将请求发送到B浏览器,拿到内容返回给浏览器。

下载negix,完成配置

服务器监听80端口,请求带着“/api”就代理到指定的服务器,也可以配置重写url。

上面的场景:前端发送一个api/xxx请求,negix代理对请求做处理。将这个请求代理到后端服务器,并重写了请求的url。


ssm项目后端表现层解决方案

1.在响应头中添加属性

在controller代码中写下面这行代码。

response.addHeader("Access-Control-Allow-Origin","http://127.0.0.1:8081");

springboot项目中,跨域问题后端怎么解决?

CORS:跨域同源共享。在响应头中设置一些配置。access-control-allow-origin属性设置

1.在目标方法上添加@CrossOrigin注解
2.添加cors的过滤器统一解决,不用每个方法都加注解
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 CorsConfig {
    @Bean
    public CorsFilter corsFilter(){
        CorsConfiguration corsConfiguration=new CorsConfiguration();
        //允许那些域访问
        corsConfiguration.addAllowedOrigin("*");
        //允许请求头字段
        corsConfiguration.addAllowedHeader("*");
        //允许请求的方法
        corsConfiguration.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
        //添加映射路径
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }
}
3.实现WebMvcConfigurer接口,重写addCorsMappings方法
   @Override
    public void addCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowCredentials(true)  //是否允许携带cookie
                .maxAge(3600) //有效时间
                .allowedHeaders("*");
    }
4.使用代理工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c#上班,上学,交通方式接口

using System;namespace INTERFACE {abstract class Person{public string Name { get; set; }public int Age { get; set; }public virtual void ShowInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}}// 接口 IWorkinterface IWork{void GotoCompany();}/…

SQL血缘解析

Druid 作为使用率特别高的的数据库连接池工具,在具备完善的连接池管理功能外,同时Druid 的 SQL解析功能可以用来防止 SQL注入等安全风险。通过对 SQL 语句进行解析和检查,Druid 可以识别并阻止潜在的恶意 SQL 语句执行,黑名单(阻止特定的 SQL 语句执行)、白名单(仅允许特…

常用的JVM启动参数有哪些?

大家好,我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机(JVM)的运行时行为…

JWT令牌与微服务

1. 什么是JWT JWT(JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性: 紧凑&#xff…

RadiAnt DICOM - 基本主题 :从 PACS 服务器打开研究

正版序列号获取:https://r-g.io/42ZopE RadiAnt DICOM Viewer PACS 客户端功能允许您从 PACS 主机(图片存档和通信系统)搜索和下载研究。 在开始之前,您需要确保您的 PACS 服务器和 RadiAnt 已正确配置。有关配置说明&#xff0c…

10. 虚拟机VMware Workstation Pro下共享Ubuntu和Win11文件夹

本文记录当前最新版虚拟机VMware Workstation Pro(2024.12)如何在win11下共享文件,以实现Windows与Ubuntu互传文件的目的。 1. 创建共享文件夹 1.1 先关闭虚拟机的客户机,打开虚拟机设置 1.2 在虚拟机设置界面找到“选项”->“…

java开发入门学习四-运算符

运算符 运算符: 运算法是一种特殊的符号,标识数据的运算,赋值等 根据分类 算数运算符 和前端运算法的方式是一致的,这里简单的描述% -- %: 取余 :增加 --: 减少 class Computed {public static voi…

EGO Planner代码解析bspline_optimizer部分(3)

1、 int BsplineOptimizer::earlyExit(void *func_data, const double *x, const double *g, const double fx, const double xnorm, const double gnorm, const double step, int n, int k, int ls) //如果force_stop_type_不为DONT_STOP就返回true,否则返回false…

Spring框架IOC

目录 一、Spring框架的介绍 1.1 Spring框架的概述 1.2 Spring框架的优点 二、Spring的核心 IOC技术 2.1 什么是IOC 2.2 IOC的程序入门 2.3 IOC技术总结 2.4 Spring框架的Bean管理的配置文件方式 一、Spring框架的介绍 1.1 Spring框架的概述 Spring是一个开放源代码的…

跨站脚本攻击的多种方式——以XSS-Labs为例二十关详解解题思路

一、XSS-Labs靶场环境搭建 1.1、XSS介绍 跨站脚本攻击(XSS)_跨站脚本测试-CSDN博客https://coffeemilk.blog.csdn.net/article/details/142266454 1.2、XSS-Labs XSS-Labs是一个学习XSS攻击手法的靶场,方便我们系统性的学习掌握跨站脚本攻击…

使用C语言编写UDP循环接收并打印消息的程序

使用C语言编写UDP循环接收并打印消息的程序 前提条件程序概述伪代码C语言实现编译和运行C改进之自由设定端口注意事项在本文中,我们将展示如何使用C语言编写一个简单的UDP服务器程序,该程序将循环接收来自指定端口的UDP消息,并将接收到的消息打印到控制台。我们将使用POSIX套…

html中实用标签dl dt dd(有些小众的标签 但是很好用)

背景描述 html <dl> <dt> <dd>是一组合标签&#xff0c;他们与ol li、ul li标签很相似 但是他却是没有默认前缀并且有缩进的标签 使用方式与table表格的标签一致 使用方式 dt和dd是放于dl标签内&#xff0c;dt与dd处于dl下相同级。就是dt不能放入dd内&am…

vue2实现word在线预览

实现附件在线预览是一个很常用的功能&#xff0c;这次正好碰到这样的需求&#xff0c;记录一下自己实现的过程。 首先是插件的选择&#xff0c;网上实现预览的方法主要有两种&#xff0c;一个是vue-office插件&#xff0c;另一个是docx-preivew插件。看网上其他网友的教程都能…

linux-----常用指令

文件和目录操作指令 ls&#xff08;list&#xff09;指令 功能&#xff1a;用于列出目录的内容&#xff0c;包括文件和子目录。示例&#xff1a; ls&#xff1a;列出当前目录下的所有非隐藏文件和目录。例如&#xff0c;在一个包含文件file1.txt、file2.txt和目录dir1的目录中&…

时间管理系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

第2节-Test Case如何调用Object Repository中的请求并关联参数

前提&#xff1a; 已经创建好了project&#xff08;File -> New -> Project&#xff0c;Type&#xff1a;API/WebService&#xff09;&#xff0c;object repository中已经创建了RESTful endpoint&#xff08;Object Repository -> New -> Web Service Request&am…

<论文>初代GPT长什么样?

一、摘要 今天我们聊一下论文《Improving Language Understanding by Generative Pre-Training》以及它所提出来的预训练模型——GPT1。我们知道Bert在出道那会儿红极一时&#xff0c;但实际上GPT1比Bert还要早几个月就出道了&#xff0c;而且同样刷新了当时的多个任务记录。GP…

研发效能DevOps: Vite 使用 Element Plus

目录 一、实验 1.环境 2.初始化前端项目 3.安装 vue-route 4.安装 pinia 5.安装 axios 6.安装 Element Plus 7.gitee创建工程 8. 配置路由映射 9.Vite 使用 Element Plus 二、问题 1.README.md 文档推送到gitee未自动换行 2.访问login页面显示空白 3.表单输入账户…

动态规划练习四(子序列子数组问题)

一、解决思路 与之前的dp问题相比&#xff0c;给我三个最大的不同感受是&#xff1a; 1、考虑能否自成一组&#xff0c;毕竟一个也是子序列&#xff0c;子数组。所以在很多的dp表填写中需要考虑只有一个的情况。 2、由于子数组子序列是连续的&#xff0c;所以有一些题可以利…

【工具变量】中国数字经济发展水平面板数据DID(2012-2022)

数据来源&#xff1a;《中国统计年鉴》、国家统计局 时间跨度&#xff1a;2012-2022年 数据范围&#xff1a;中国各省 包含指标&#xff1a; 1. 地区 2. id 3. 年份 4. 互联网域名数 5. 互联网接入端口数 6. 互联网宽带接入用户数 7. 移动基站密度 8. 移动电…