【Java专题_03】spring-boot跨域问题如何解决

简介: 【Java专题_03】spring-boot跨域问题如何解决

一、什么是跨域?

1、域:协议 + 域名 + 端口;三者完全相同则为同域,反之有其一不同均为不同域。
         
   2、跨域请求:当前【发起请求】的域和【请求指向】的域属于不同域时,该次请求称之为跨域请求。
   
   3、同源限制:浏览器针对跨域请求做出同源限制资源访问,Cookie、LocalStorage 和 IndexDB 无法跨域问;
    
   4、DOM元素无法跨域访问;Ajax无法跨域请求。

二、跨域请求被谁拦截?

test.html代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>使用ajax发送请求</title>
  <!-- 引入jq需要的js,可以上jq菜鸟教程里面复制这个js,是在线的,联网即可用 -->
  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
     $("#send").click(function(){
              $.ajax({
                        url: "http://localhost:8080/user/getUser",
                        type: "GET",
                        success: function (result) {
                            console.log(result);
                        }
                    });
        })
       
});
</script>
</head>
<body>
  <button id="send">发送请求</button>
</body>
</html>

1、 看上面的图,我们可以看到当前台发送请求时,可以看到后台并没有拦截,只是在数据返回前台的时候出问题。
 
 2、总结:域名和端口不同时的跨域,并非浏览器拦截发起请求,实际请求可以正常到达指向的资源,也可以正常返回,只       是浏览器拦截了返回内容。协议不同时,例如https发起Ajax跨域请求到http,则部分浏览器(Chrome,Firefox)会直接拦截请求,请求无法到达指向的资源。

三、解决办法:

1、创建一个全局配置类:CorsConfig.java(工程目录如下:)

CorsConfig.java代码如下:

package com.xsy.Configuration;
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;
@Configuration
public class CorsConfig {
    @Bean
    public CorsConfiguration corsConfiguration() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //实际请求中允许携带的首部字段
        corsConfiguration.addAllowedHeader("*");
        //允许那些域跨域访问
        corsConfiguration.addAllowedOrigin("*");
        //允许那些请求方法
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter(CorsConfiguration corsConfiguration) {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration); 
        return new CorsFilter(source);
    }
}

此时可以看到已经可以访问到数据了

四、小提示

1、如果只是个别方法需要跨域访问的话,可以使用  @CrossOrigin(origin="*")来进行跨越:
使用如下:
在方法级别上只需要加上@CrossOrigin(origin="*")再次跨域请求即可正常访问:

相关文章
|
17天前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
55 0
|
10天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
14天前
|
监控 Java 开发者
Spring Boot框架在java领域的优势
随着云计算、微服务架构的兴起,Java开发领域迫切需要一套高效、灵活且易于上手的框架来应对日益复杂的业务需求。正是在这样的背景下,Spring Boot应运而生,以其独特的魅力迅速成为了Java开发者手中的利器。
30 3
|
15天前
|
安全 前端开发 Java
Java技术栈中的核心组件:Spring框架
Java作为一门成熟的编程语言,其生态系统拥有众多强大的组件和框架,其中Spring框架无疑是Java技术栈中最闪耀的明星之一。Spring框架为Java开发者提供了一套全面的编程和配置模型,极大地简化了企业级应用的开发流程。
25 1
|
18天前
|
人工智能 移动开发 Java
Java智能之Spring AI:5分钟打造智能聊天模型的利器
尽管Python最近成为了编程语言的首选,但是Java在人工智能领域的地位同样不可撼动,得益于强大的Spring框架。随着人工智能技术的快速发展,我们正处于一个创新不断涌现的时代。从智能语音助手到复杂的自然语言处理系统,人工智能已经成为了现代生活和工作中不可或缺的一部分。在这样的背景下,Spring AI 项目迎来了发展的机遇。尽管该项目汲取了Python项目如LangChain和LlamaIndex的灵感,但Spring AI并不是简单的移植。该项目的初衷在于推进生成式人工智能应用程序的发展,使其不再局限于Python开发者。
38 2
|
19天前
|
缓存 前端开发 Java
在Java项目中实现跨域资源共享(CORS)
在Java项目中实现跨域资源共享(CORS)
|
22天前
|
消息中间件 Java BI
使用Java和Spring Batch实现批处理
使用Java和Spring Batch实现批处理
|
23天前
|
Java 网络安全 API
Java中如何解决SocketException异常?
Java中如何解决SocketException异常?
|
23天前
|
JSON 监控 Java
Java中如何解决JsonProcessingException异常?
Java中如何解决JsonProcessingException异常?
|
18天前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)