SpringBoot跨域配置详解

一、SpringBoot跨域配置不允许

默认情况下,SpringBoot应用程序不允许跨域访问,这可以有效地保护应用程序数据的安全性。如果你想启用跨域访问,你需要进行相应的配置。

二、SpringBoot配置类

在SpringBoot中,我们可以通过创建一个配置类来处理跨域请求。具体步骤如下:

  1. 创建一个类,并使用注解 @Configuration。
  2. 在类中创建一个方法,在方法上面使用注解 @Bean,并返回一个类型为 WebMvcConfigurer 的对象。
  3. 在 WebMvcConfigurer 中配置跨域请求的相关参数,例如允许访问的域名、允许的方法、允许的头信息等。

下面是示例代码:

@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                super.addCorsMappings(registry);
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                        .allowedHeaders("*")
                        .allowCredentials(true)
                        .maxAge(3600);
            }
         };
    }
}

三、SpringBoot跨域配置不生效

如果你的配置无效,可能是你的配置被其他高优先级的配置覆盖了。这时,你可以尝试在应用程序的配置文件(application.properties 或 application.yml)中添加以下参数:

spring.mvc.dispatch-options-request=true

四、SpringBoot跨域配置文件在哪

SpringBoot的跨域配置文件可以放在 application.properties 或 application.yml 中,具体可以根据你的需要进行选择。

下面是示例代码:

# application.properties
spring.mvc.dispatch-options-request=true
spring.mvc.cors.allow-credentials=true
spring.mvc.cors.allowed-origins=*
spring.mvc.cors.allowed-methods=GET, POST, PUT, DELETE, OPTIONS
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.max-age=3600

五、SpringBoot跨域配置无效

如果你的跨域配置依然无效,可能是你的请求没有通过 Spring MVC 的控制器进行处理,而是通过其他方式进行处理。这时你可以使用过滤器来进行配置,具体可以参考以下代码:

public class CorsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String origin = request.getHeader("Origin");
        if (StringUtils.isNotBlank(origin)) {
            response.setHeader("Access-Control-Allow-Origin", origin);
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
            response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
            response.setHeader("Access-Control-Max-Age", "3600");
        }
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

六、SpringBoot配置SSL

如果你的应用程序使用了SSL连接,你需要进行相应的配置才能正确地处理跨域请求:

# application.properties
server.port=443
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=123456
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

七、SpringBoot跨域配置未生效

如果你的跨域配置依然未生效,可能是你的应用程序正在使用 Spring Security 进行安全控制,这时你需要在配置类中添加如下代码:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable();
    }
}

八、SpringBoot跨域实现方式

目前,SpringBoot实现跨域请求的方式有以下几种:

  1. 配置类方式
  2. 过滤器方式
  3. 使用注解方式(@CrossOrigin)
  4. 使用 WebSecurityConfigurerAdapter 配置方式

以上实现方式都可以有效地解决跨域请求的问题,但具体使用哪种方式,需要根据自己的需求进行选择,并且需要注意优先级问题。

原创文章,作者:MVOS,如若转载,请注明出处:https://www.506064.com/n/136403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MVOSMVOS
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • SpringBoot如何设置不输出Info日志

    本篇文章将带您了解如何在SpringBoot项目中关闭Info级别日志输出。 一、为什么要关闭Info日志 在开发中,我们经常会使用Log4j、Logback等框架来输出日志信息,…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论