当前位置: 首页 > news >正文

前后端分离跨域问题解决方案

Vue和SpringBoot的跨域问题的4中解决方案

跨域问题产生的原因:浏览器的保护机制,同源策略协议,域名,端口;三个中有一个不同就会产生跨域问题

解决方案(后端):

1.@CrossOrigin注解:

在目标方法上使用@CrossOrigin注解

 
@CrossOrigin@GetMapping("/captcha")public void captcha(HttpServletResponse response, HttpServletRequest request) throws IOException {SpecCaptcha captcha = new SpecCaptcha(150,40);String text = captcha.text();System.out.println(text);captcha.out(response.getOutputStream());}

2.在配置类中添加CORS过滤器

在配置类中写过滤器一般用@bean注解

 
@Configurationpublic class CorsConfig {@Beanpublic CorsFilter corsFilter(){//        创建一个CorsConfiguration对象,用于存储CORS配置。CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.addAllowedHeader("*");//        创建一个UrlBasedCorsConfigurationSource对象,用于存储基于URL的CORS配置UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();//        将CORS配置注册到所有URL模式(/**)。这意味着对于所有请求,都应用这个CORS配置。source.registerCorsConfiguration("/**",corsConfiguration);return new CorsFilter(source);}}

3.创建一个自定义CROS过滤器(实现Filter接口)

 
package com.kfm.bisheserve.filter;​import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;​/*** @author 27359* date:2024/5/29*/public class CorsFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);// 在这里添加过滤器初始化逻辑(CORS)}​@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//        HttpServletResponse是ServletResponse接口的一个实现类,专门用于处理HTTP响应HttpServletResponse httpResponse = (HttpServletResponse) response;//设置CORS响应头httpResponse.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名访问httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); // 允许的HTTP方法httpResponse.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的缓存时间httpResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN"); // 允许的请求头​// 如果是预检请求(OPTIONS请求,一般是浏览器自己发送的请求),直接返回成功if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) {httpResponse.setStatus(HttpServletResponse.SC_OK);} else {// 如果是其他请求,继续执行过滤器链,chain.doFilter()是Java Servlet API中的方法调用,用于在过滤器链中继续执行下一个过滤器chain.doFilter(request, response);}}​@Overridepublic void destroy() {Filter.super.destroy();// 在这里添加过滤器销毁逻辑(如果需要)}}
 ​

4.实现WebMvcConfigurer接口,重写addCorsMappings方法

 public class CorsWebMvcConfig implements WebMvcConfigurer {//    配置CORS映射@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")  //这个映射适用于所有URL模式(/**),表示对于所有请求,都应用这个CORS配置.allowedOriginPatterns("/**")  //这意味着允许所有域名的请求访问你的后端服务。.allowedMethods("*")  //这意味着允许所有类型的HTTP请求(如GET、POST、PUT、DELETE等)。.allowCredentials(true) //这通常与Access-Control-Allow-Origin响应头一起使用,以允许跨域请求携带cookie。.maxAge(3600)  //这意味着浏览器可以缓存预检请求的结果,避免在每次跨域请求时都发送预检请求.allowedHeaders("*"); //这意味着允许所有类型的请求头。}}

相关文章:

  • MagicPose4D:解锁AI驱动的3D模型动作新纪元
  • [C#]winform部署官方yolov10目标检测的onnx模型
  • 【Qt秘籍】[003]-Qt环境变量配置-磨刀不误砍柴工
  • [FlareOn6]Overlong
  • 知识分享:大数据信用花导致的评分不足多久能恢复
  • 领域驱动设计(DDD)学习笔记之:基础理论与概念
  • return _VF.meshgrid(tensors, **kwargs) 的参考解决方法
  • B2124 判断字符串是否为回文
  • 动态规划之买卖股票大集合
  • ②单细胞学习-组间及样本细胞比例分析
  • 深度剖析:为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解
  • k8s问题
  • 代码质量与可维护性提升
  • 生成式AI的GPU网络技术架构
  • 5月28(信息差)
  • 【知识碎片】第三方登录弹窗效果
  • css的样式优先级
  • exif信息对照
  • Java,console输出实时的转向GUI textbox
  • java2019面试题北京
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js继承的实现方法
  • js学习笔记
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • python_bomb----数据类型总结
  • rabbitmq延迟消息示例
  • redis学习笔记(三):列表、集合、有序集合
  • RxJS: 简单入门
  • spring boot下thymeleaf全局静态变量配置
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring-boot 启动时碰到的错误
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Terraform入门 - 3. 变更基础设施
  • 搭建gitbook 和 访问权限认证
  • 近期前端发展计划
  • 坑!为什么View.startAnimation不起作用?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前言-如何学习区块链
  • 数据仓库的几种建模方法
  • 终端用户监控:真实用户监控还是模拟监控?
  • C# - 为值类型重定义相等性
  • k8s使用glusterfs实现动态持久化存储
  • 大数据全解:定义、价值及挑战
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • !!java web学习笔记(一到五)
  • #QT(QCharts绘制曲线)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (八)c52学习之旅-中断实验
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (六)vue-router+UI组件库
  • (七)c52学习之旅-中断