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
Spring Boot2 系列教程(十四)CORS 解决跨域问题
Spring Boot2 系列教程(十四)CORS 解决跨域问题
|
6天前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
|
2月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
36 2
|
2月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
39 2
|
2月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
141 1
|
2月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
33 1
|
1月前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)
|
3月前
|
JSON 安全 前端开发
跨域详解及Spring Boot 3中的跨域解决方案
本文介绍了Web开发中的跨域问题,包括概念、原因、影响以及在Spring Boot 3中的解决方案。跨域是由浏览器的同源策略限制引起的,阻碍了不同源之间的数据传输。解决方法包括CORS、JSONP和代理服务器。在Spring Boot 3中,可以通过配置CorsFilter来允许跨域请求,实现前后端分离项目的正常运行。
110 3
 跨域详解及Spring Boot 3中的跨域解决方案
|
1月前
|
前端开发 JavaScript Java
使用Spring Boot实现跨域资源共享(CORS)
使用Spring Boot实现跨域资源共享(CORS)
|
2月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
43 0