springboot2.* 的跨域问题

最近想试试前后端分离的时候,用ajax调用springboot 的接口的时候,出现了跨域的问题!

弄了老半天才不出现了。首先ajax 端设置dataType :jsonp,不起作用,有的文章说只支持get请求,自己试了好久没试出来。

其次就是从sprongboot上入手了,网络上有好多文章,大多都是同一篇文章,

我试了其中两个,而且网络上大多没有导入了哪个jar包,的说明。

先把我的整个配置类贴上来:

package com.lpw.dbvideo.config;

import org.apache.http.HttpHeaders;
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;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter(){
        // 添加CORS配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 放行哪些原始域
        corsConfiguration.addAllowedOrigin("*");
        // 是否发送cookie信息
        corsConfiguration.setAllowCredentials(false);
        // 放行哪些原始域(请求方式)
        corsConfiguration.addAllowedMethod("*");
        // 放行哪些原始域(头部信息)
        corsConfiguration.addAllowedHeader("*");
        // 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
        corsConfiguration.addExposedHeader(HttpHeaders.ACCEPT);

        // 添加映射路径
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);

        // 返回新的CorsFileter
        return new CorsFilter(source);
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            //重写父类提供的跨域请求处理的接口
            public void addCorsMappings(CorsRegistry registry) {
                //添加映射路径
                registry.addMapping("/**")
                //放行哪些原始域
                .allowedOrigins("*")
                //是否发送Cookie信息
                .allowCredentials(true)
                //放行哪些原始域(请求方式)
                .allowedMethods("GET","POST", "PUT", "DELETE")
                //放行哪些原始域(头部信息)
                .allowedHeaders("*")
                //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
                .exposedHeaders("Header1", "Header2");
            }
        };
    }


}

先说那个返回个新的corsFileter(),上面的那个方法,我卡在了最后一个设置公开标头的地方网络上说的那个HttpHeaderContent……我没有找到那个类,其次不能设置*,项目会起不来。因为API,

springboot2.* 的跨域问题_第1张图片

CorsConfiguration 中这个方法的源码:
/**
	 * Add a response header to expose.
	 * 

Note that {@code "*"} is not a valid exposed header value. */ public void addExposedHeader(String exposedHeader) { if (ALL.equals(exposedHeader)) { throw new IllegalArgumentException("'*' is not a valid exposed header value"); } if (this.exposedHeaders == null) { this.exposedHeaders = new ArrayList<>(4); } this.exposedHeaders.add(exposedHeader); }

最后我放弃这种办法了,如果您解决了,希望可以评论告诉我,谢谢!

然后就是第二种全局配置了,测试了可以用。

但之后在记录这个问题的时候想重现跨域问题,但我把新的配置都注释掉,发现还是没有出现问题,很郁闷呀,重启服务,清理页面缓存后都没出现。这个问题知道的话,也欢迎留言。

你可能感兴趣的:(日常问题,springboot)