`

前后端分离跨域问题汇总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

分享到:
评论

相关推荐

    2017年前端面试题整理汇总100题.pdf

    对前端趋势的了解,比如对响应式设计、前后端分离架构、前端安全等领域的认识,也是面试官期望听到的内容。 #### 学习方法与规划 在面试中,表达学习方法和未来规划能体现候选人的自我驱动力和职业发展方向。可以...

    2018年JAVA架构师面试后的问题汇总-word范文 (2页).docx

    Ajax默认不能跨域,但可以通过JSONP、CORS等方式实现跨域请求。 17. **XML解析**: XML解析器有DOM、SAX、StAX等,DOM一次性加载整个文档,适用于小型XML;SAX事件驱动,适用于大文件;StAX是推拉结合的方式。 ...

    前端高质量面试题资源汇总

    - CORS、JSONP、代理服务器等是常见的跨域解决策略。 7. **存储技术**: - `cookie`、`localStorage`和`sessionStorage`各有其用途,`cookie`适用于小量数据且需发送到服务器,`localStorage`和`sessionStorage`...

    百度面试题汇总(java)

    13. **实现跨域AJAX**:通过CORS(跨源资源共享)机制或JSONP技术实现跨域请求。 14. **JavaScript原型链机制**:JavaScript对象通过原型链实现继承。 15. **JavaScript闭包**:闭包使得函数可以访问其外部作用域...

    前端面试题汇总

    - **绕过同源策略限制**:允许跨域资源共享(CORS)。 **8. 网页标准和标准制定机构的重要性** - **网页标准** 提供了一套统一的开发规范,有助于提高网页的可读性和可维护性。 - **标准制定机构** 如 W3C,负责...

    Extjs中文教程

    - 测试环境中还需要配置CORS跨域资源共享,确保API调用正常工作。 ##### 4. SpketIDE - SpketIDE是一款支持Extjs开发的集成开发环境。 - 它提供了代码高亮、智能提示、项目管理等功能,大大提高了开发效率。 #####...

Global site tag (gtag.js) - Google Analytics