`

前后端分离跨域问题汇总CORS

 
阅读更多

 

一、跨域通信的问题,即CORS。默认会403

1、现象:前端调用会报错“has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource”,后端收不到请求。

2、方案,后端设置:Access-Control-Allow-Origin

2.1 springboot2的话,可以设置:

2.1.1 接口类或方法注解的方式

@CrossOrigin

 

2.1.2 拦截器的方式

package com.order.config;


import com.google.common.collect.Lists;
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;

import java.util.List;

/**
 * 实现基本的跨域请求
 */

@Configuration
public class GlobalCorsConfig {

    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        List<String> allowedOriginList = Lists.newArrayList();
        allowedOriginList.add("http://localhost:3000");
        allowedOriginList.add("http://localadmain.com");
        corsConfiguration.setAllowedOrigins(allowedOriginList);
//        corsConfiguration.addAllowedOrigin(allowedOriginList); // 允许任何域名使用
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedHeader("*"); // 允许任何头
        corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等)
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); // 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

 

二、登录状态保持的问题

 

处理了问题一,后面的ajax请求还会有401的问题,因为丢失了登录状态。方案有:

1、共享cookie的方式。

前端:

<script>
    $(function () {
        $.ajax({
            url : "http://www.b.com:8888/test/setCookie",
            method: "get",
            success : function (json) {
                console.log(json);
            },
            xhrFields: {
                withCredentials: true
            }
        });
    })
</script>

 后端:

@CrossOrigin(origins="http://www.a.com:8888",allowCredentials = "true")

        CorsConfiguration corsConfiguration = new CorsConfiguration();
        List<String> allowedOriginList = Lists.newArrayList();
        allowedOriginList.add("http://localhost:3000");
        allowedOriginList.add("http://localadmain.com");
        corsConfiguration.setAllowedOrigins(allowedOriginList);
//        corsConfiguration.addAllowedOrigin(allowedOriginList); // 允许任何域名使用
        corsConfiguration.setAllowCredentials(true);

  

2、token的方式:

可以自己实现,也可以借助:

jwt

oauth2

 

 

 

 

 

 

z

分享到:
评论

相关推荐

    C#web项目前后端分离跨域解决[Demo].zip

    在这个"**C#web项目前后端分离跨域解决[Demo]**"中,我们主要探讨的是如何在这样的环境中解决跨域问题。 跨域是Web应用程序中一个常见的安全限制,由于浏览器的同源策略,前端请求通常只能发送到同一域名下,这限制...

    使用docker部署nginx前后端解决跨域问题.docx

    使用docker部署nginx前后端解决跨域问题

    前后端分离跨域解决配置类

    针对前后端分离,产生的跨域问题,提供此java服务配置类,解决前后端分离跨域问题配置类,可直接引入代码中使用,不需要做修改

    前后端分离跨域问题

    跨域问题来源于浏览器的同源策略。客户端和服务端不同IP不同端口都算跨域。 springboot解决跨域有cros,配置就是那几项。 如果把服务端程序部署在nginx上,在nginx 也可以解决,服务端和nginx只用写一个即可, ...

    [SpringBoot+Ajax]跨域资源共享CORS前后端分离简单演示样例.rar

    总结,这个"SpringBoot+Ajax]跨域资源共享CORS前后端分离简单演示样例"旨在帮助开发者理解并实践CORS在SpringBoot后端和Ajax前端中的应用,解决跨域问题,提升Web应用的开发效率和用户体验。通过学习和运行这个样例...

    12 spring boot Security Jwt 前后端分离跨域登录

    标题 "12 spring boot Security Jwt 前后端分离跨域登录" 提示我们这个项目是关于使用Spring Boot Security和JWT(JSON Web Tokens)技术来实现一个前后端分离的跨域登录系统。在这个系统中,Spring Boot作为后端...

    vue+springboot前后端分离工程跨域问题解决方案解析

    Vue+SpringBoot前后端分离工程跨域问题解决方案解析 本文主要介绍了Vue+SpringBoot前后端分离工程跨域问题解决方案解析,通过示例代码详细介绍了跨域问题的解决方案,对大家的学习或者工作具有一定的参考学习价值。...

    vue+springboot前后端分离实现单点登录跨域问题解决方法

    最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot...我面临的第一个问题是跨域,浏览器控制台直接报CORS,以我多年开发经验,我果断在后台配置了跨域配置,代码如下: @Configuration publi

    SpringBoot实现前后端分离的跨域访问(CORS)

    【SpringBoot实现前后端分离的跨域访问(CORS)】 CORS,即Cross-Origin Resource Sharing,跨域资源共享,是一种允许浏览器从不同源加载资源的机制。在前后端分离的架构中,由于前端和后端可能部署在不同的域名下...

    vue+前后端的跨域问题解决b sesson不一样解决.zip

    但实际开发中,由于前后端分离,通常它们会部署在不同的域名或端口下,这就导致了跨域问题的出现。本文将深入探讨如何解决Vue.js与后端服务之间的跨域问题,以及当Session不一致时的处理策略。 首先,了解跨域的...

    跨域资源共享CORS协议介绍

    跨域资源共享(CORS)是一种安全机制,允许一个域(网站)上的Web应用访问另一个域上的资源。随着Web应用变得越来越复杂,为了增强用户体验,经常需要在一个域名下发起对另一个域名的HTTP请求。CORS的出现解决了...

    若依前后端分离项目部署文档(完整版)

    ### 若依前后端分离项目部署指南 #### 一、部署Linux + Nginx ...综上所述,通过上述步骤和方法,可以顺利地完成若依平台的前后端分离项目在不同环境下的部署,并有效解决部署过程中可能出现的各种问题。

    springboot实现前后端分离项目

    本项目基于Spring Boot实现了后端接口,并结合Vue.js进行前端展示,同时利用axios处理跨域问题,提供了一个完整的前后端分离实践示例。 1. **Spring Boot**: Spring Boot是Spring框架的一个简化版,它简化了...

    SSM框架整合Dome(前后端分离)

    这个项目是一个实现前后端分离的示例,旨在帮助开发者理解如何在实际开发环境中运用这三个框架,并处理跨域和乱码等常见问题。 首先,Spring作为整个应用的基石,负责管理对象(Bean)和提供依赖注入(DI)。通过...

    Tomcat+Nginx反向代理部署前后端分离项目解决跨域问题

    最近自己做了一个前后端分离项目,前端采用HBuilderX开发,后端采用IDEA开发,在本地开发也跨域,部署到云服务器也跨域,下面介绍两种解决方案。 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定...

    Spring boot 和Vue开发中CORS跨域问题解决

    然而,在进行前后端分离开发时,跨域资源共享(CORS)的问题是无法避免的一个挑战。本文旨在详细阐述CORS跨域问题的背景、解决方法以及如何在Spring Boot和Vue.js的结合使用场景下处理跨域问题。 ### CORS跨域问题...

    nginx跨域问题,解决多端口,多ip问题

    前后端分离跨域问题是指在前端和后端分离的情况下,前端无法访问后端服务器资源的问题。这种问题通常是由于跨域限制所造成的。解决这种问题的方法是使用 Nginx 的反向代理功能,将前端请求代理到后端服务器上。 二...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    环境: 前端 vue ip地址:192.168.1.205 后端 springboot2.0 ip地址:192.168.1.217 主要开发后端。 问题: ...后续请求取出的用户都为null。 解决过程: ...后台添加过滤器,因为前后端分离,不可能每个方

Global site tag (gtag.js) - Google Analytics