首页 > 编程语言 >java后端解决跨域问题

java后端解决跨域问题

时间:2023-01-10 10:33:43浏览次数:42  
标签:浏览器 请求 后端 access Cookie java config 跨域

一、问题来源

  最近同事开发一个功能,提供接口给第三方调用,第三方调用时直接前端进行调用的因此触发了跨域拦截,报错如下:

 二、解决方法

  可以要求第三方在自己后端做一个转发,前端调自己后端的接口,后端再去请求我们的接口,然后将数据返回给前端,也可以我们自己后端处理,增加CORS配置:

@Configuration
public class OriginConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOrigin("*");
        //是否发送Cookie信息
        config.setAllowCredentials(true);
        //放行哪些原始域(请求方式)
        config.addAllowedMethod("*");
        //放行哪些原始域(头部信息)
        config.addAllowedHeader("*");
        //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
        //config.addExposedHeader("*");

        //2.添加映射路径
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}

三、总结

  跨域问题出现在浏览器中,总的来说,浏览器只有在协议,主机,端口三者相同是,才可以互相访问,否则不可以访问,这就是浏览器的同源策略而造成跨域问题。跨域请求不通是因为:请求能正常发出去,后端也能正常响应,是浏览器把响应拦截了,所以才会出现报错 : has been blocked by CORS policy: Response to preflight request does not pass access control check。

  access-control-allow-origin :该字段是必须的,它的值要么是请求时 origin 字段的值,要么是一个 * ,表示接受任何域名的请求。
  access-control-allow-credentials :该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie 不包括在 CORS 请求之中,设为 true ,表示服务器明确许可,Cookie 可以包含在请求中,一起发送给服务器,这个值也只能设为true ,如果服务器不要浏览器发送 Cookie ,删除字段即可。
  Access-Control-Allow-Methods :该字段必须,他的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法,注意,返回的是所有支持的方法,而不是浏览器请求的那个方法,这是为了避免多次 “ 预检 ” 请求,其实最重要的是:access-control-allow-origin 字段,添加一个 * ,允许所有的域都能访问。

标签:浏览器,请求,后端,access,Cookie,java,config,跨域
From: https://www.cnblogs.com/jxxblogs/p/17039380.html

相关文章

  • Java面试题Day07
    1.什么是反射机制,反射机制的优缺点.Java反射机制是在运行过程中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属......
  • [JAVA]es整合多数据源
    配置文件spring:elasticsearch:rest:uris:${ES_URL:http://***:9200}username:${ES_USERNAME:***}password:${ES_PASSWORD:***}elastic:m......
  • 001_【博学谷学习记录】超强总结,用心分享,狂野大数据:Java篇
    title:Javatags:-Java语法-数组-面向对象-集合-常用API-文件-IO流-Socket编程-Junit测试-日志-异常-反射-注解......
  • 浏览器访问 JSP 文件时无法进入 JavaScript 代码
    问题描述浏览器访问<head>中有JavaScript代码的JSP文件:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title......
  • JavaScript学习笔记—常量、标志符
    1.常量使用const声明常量,常量只能赋值一次,重复赋值会报错除了常规的常量外(如PI),有一些对象类型的数据也会生命为常量constPI=3.1415926;console.log(PI);//3.14......
  • Java的深拷贝和浅拷贝的区别
    一、拷贝的引入(1)、引用拷贝创建一个指向对象的引用变量的拷贝。Teacherteacher=newTeacher("Taylor",26);Teacherotherteacher=teacher;System.out.println(te......
  • java不同版本jdk切换
    jdk环境搭建首先要有java环境,然后安装两个不同版本的jdk,我这里就使用java8和java15CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jarJAVA_HOME%JA......
  • java操作hdfs
    packagecagy.hap;importjava.io.FileNotFoundException;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Fil......
  • 用Java写一个PDF,Word文件转换工具
    前言前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具源码weloe/FileConversion(github.com)主要功能就......
  • 【java基础】创建不可变集合
    创建不可变集合List<Integer>list=List.of(1,2,3,4);//[1,2,3,4]Set<Integer>set=Set.of(1,2,3,4);//[1,2,3,4]Map<Integer,Integer>map=Map.of(1,2,3,4);//{1......