Spring Boot跨域处理

简介: Spring Boot跨域处理

跨域处理

跨域问题演示

我们先来演示一下跨域问题,后端代码参照上一篇博客
image.png
image.png
如果在前端想要获取班级的数据,就应该给后端发送一个get请求
image.png
但是我们可以发现出错了
image.png

跨域概述

  • 跨域问题:在前后端分离开发过程中,前后端程序独立部署在不同的服务器,默认是拒绝跨域的
  • 跨域问题产生原因:在设计HTTP协议的时候,为了保证数据的安全,定义了同源同策规则,就比如我们的qq不能发消息给微信一样,所以不允许跨域访问
  • 跨域问题的解决方案:

    • 后端处理
    • 前端处理
    • 中间反向代理服务器

什么是跨域,跨域解决方案

讲跨域的话,那我们就得了解一下同源策略。同源策略是由Netscape提出的一个著名的安全策略,它是浏览器最核心也是最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。
同源是指协议、域名、端口要相同。同源策略是基于安全方面的考虑提出了的,这个策略本身是没有问题的,但是我们在实际开发中,因为各种原因又经常会有跨域的需求,传统的跨域方案是JSONP,JSONP虽然可以解决跨域,但是有一个很大的局限性,那就是它只支持GET请求,不支持其他类型的请求

本篇文章要说的是CORS(Cross-origin resource sharing,跨域源资源共享),是一个W3C标准,它是一份浏览器技术的规范,提供了Web服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是JSONP模式的现代版,在Spring框架中,对于CORS也提供了相应的解决方案。

解决方法

在方法上使用@CrossOrigin

 /**
     * 查询所有班级信息
     */
    @GetMapping("/school/cls")
    //所有的客户端请求都运行
    //@CrossOrigin
    //参数:限制前端跨域的地址
    @CrossOrigin(value = "http://localhost:8848")
    public ResultInfo queryAllCls() {
        ResultInfo info = new ResultInfo();
        try {
            List<Cls> clsList = clsService.queryAllCls();
            info.setCode(200);
            info.setOk();
            info.setData(clsList);

        } catch (Exception e) {
            e.printStackTrace();
            info.setError();

        }
        return info;
    }

image.png

自定义全局配置类

这种方式不适合带请求头的方式

/**
 * @author zengyihong
 * @create 2022--08--16 17:56
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * addMapping:允许哪一些资源路径被跨域
     * allowedOrigins:允许哪些资源被跨域
     * allowedMethods:允许哪些请求方式被跨域
     * allowCredentials:是否使用缓存机制
     * maxAge:跨域请求的超时时间
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {

         registry.addMapping("/**")
                 .allowedOrigins("*")
//                 .allowedOrigins("http://localhost:8080","http://localhost:88848")
                 .allowedMethods("*")
//                 .allowedMethods("GET","POST","DELETE","PUT")
                 .allowCredentials(false)
                 .maxAge(3600);
    }
}
 

自定义跨域过滤器

package com.zyh.springboot.config;


import org.springframework.boot.web.servlet.FilterRegistrationBean;
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;

/**
 * @author zengyihong
 * @create 2022--08--16 19:04
 */
@Configuration
public class CustomCorsFilter {
    @Bean
    public FilterRegistrationBean corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(false);//表示是否允许请求带有验证信息
        config.addAllowedOrigin("*");//表示允许所有,可以设置需要的地址
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);//CORS配置对所有接口都有效
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(3600);
        return bean;





    }
}

image.png

相关文章
|
2月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
29天前
|
安全 Java 应用服务中间件
SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?
CORS是Web开发中常见且重要的机制,SpringBoot通过提供注解、全局配置和过滤器等多种方式来解决跨域问题。选择适合的方式可以帮助开发者轻松处理跨域请求,提高应用的灵活性和安全性。
67 2
|
2月前
|
前端开发 安全 Java
springboot解决跨域问题
跨域问题指前端调用与后端接口不在同一域名或端口时产生的安全限制。本文介绍两种在Spring Boot中解决跨域问题的方法:一是通过配置CorsFilter,二是实现WebMvcConfigurer接口。配置完成后重启项目即可生效。作者:博笙困了。来源:稀土掘金。
|
2月前
|
安全 JavaScript Java
SpringBoot解决跨域最佳实践
本文介绍了跨域问题的起因及最佳实践,重点讲解了SpringBoot中如何利用`CorsFilter`解决跨域问题。首先解释了由于浏览器的同源策略限制导致的跨域现象,然后提出了在服务端入口处解决跨域问题的建议,最后详细展示了三种SpringBoot中配置跨域的方法:使用默认配置、自定义配置规则以及通过配置文件管理跨域设置,以适应不同的应用场景。
|
2月前
|
前端开发 安全 JavaScript
SpringBoot 如何解决跨域问题?
本文深入探讨了Spring Boot解决跨域问题的方法,包括全局配置CORS、使用@CrossOrigin注解和自定义过滤器,提供了详细的代码示例和分析,帮助开发者有效应对Web开发中的跨域挑战。
|
2月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
49 2
|
3月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
403 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
84 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
189 1
|
3月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
90 2