您的位置:

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 配置方式

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