前后端分离的跨域配置

简介: 前后端分离的跨域配置

公众号merlinsea


  • 背景:在我们平时开发前后台分离的项目的时候,前端的资源是一个url域名(比如www.home.cn),后台的函数功能是另一个URL域名(比如 api/v1/pri/product),因此存在前台域名和后台功能函数域名不同源的情况,这种情况会导致通过后台url返回的数据无法在前台进行展示。

640.jpg

  • 跨域报的错误是

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.


  • 如何避免这种情况,就需要配置跨域策略:
  • 就是在响应报文的响应头中加入Access-Control-Allow-Origin = origin的key-value,这个key-value表示后端返回的内容可以允许任何前端页面访问。
  • 在后端代码中编写拦截器,用于拦截返回的response


public class CorsInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //orgin表示接受响应结果可以在任意域名中展示,也可以指定前端资源的域名
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*");
        //这里可以不加,但是其他语言开发的话记得处理options请求
        /**
         * 非简单请求是对那种对服务器有特殊要求的请求,
         * 比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。
         * 都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,
         * 服务器允许之后,浏览器会发出正式的XMLHttpRequest请求
         */
        if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
            return true;
        }
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}


  • 将拦截器通过配置文件类配置出来并交由spring进行管理
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    //跨域拦截器
    @Bean
    CorsInterceptor corsInterceptor(){
        return new CorsInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 用于表示后端的哪些接口要被跨域拦截器拦截,这里是后端的全部接口都要被拦截
         */
        registry.addInterceptor(corsInterceptor()).addPathPatterns("/**");
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}


相关文章
Mac 快速查找快捷键command+f失效解决办法
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/81214817 最近 Chrome 经常的遇到 Command + F 快捷键失效的问题,真是日了狗了。
4259 0
|
6月前
|
机器学习/深度学习 人工智能 移动开发
ai搜索工具正在重构搜索流量入口
通义千问AI搜索通过算法优化、多模态理解与动态分发,重构流量入口。融合结构化数据、场景化设计与推荐联动,实现跨端协同与实时热点响应,提升搜索转化与用户体验。(238字)
305 0
|
机器学习/深度学习 算法 文件存储
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
1174 10
YOLOv11改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型
|
9月前
|
移动开发 自动驾驶 5G
下一代汽车雷达系统调制方案的统一模型与综述
本文提出统一信号模型,系统综述下一代汽车雷达调制方案。涵盖FMCW、PMCW、OFDM、OCDM与OTFS,分析其波形特性、抗干扰能力及实现复杂度,为高阶自动驾驶感知技术发展提供理论支撑与路径指引。(238字)
779 3
下一代汽车雷达系统调制方案的统一模型与综述
|
存储 JavaScript 前端开发
深入理解 Git submodules
深入理解 Git submodules
1107 0
深入理解 Git submodules
|
存储 网络架构
网络速率与下载速率
【8月更文挑战第8天】
5075 1
网络速率与下载速率
|
人工智能 供应链 安全
|
Shell Linux 数据安全/隐私保护
Notepad-- 轻量级文本编辑器的安装及基本使用
【7月更文挑战第11天】Notepad-- 轻量级文本编辑器的安装及基本使用
1421 4
|
移动开发 前端开发 Java
前后端分离架构模式讨论:要前后端分离,不要前后端分裂
前后端分离架构模式讨论:要前后端分离,不要前后端分裂
778 11
|
机器学习/深度学习 监控 算法
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计(1)
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计