版权声明:版权有就有吧。 https://blog.csdn.net/m0_38044453/article/details/85248277
最近想试试前后端分离的时候,用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,
CorsConfiguration 中这个方法的源码:
/**
* Add a response header to expose.
* <p>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);
}
最后我放弃这种办法了,如果您解决了,希望可以评论告诉我,谢谢!
然后就是第二种全局配置了,测试了可以用。
但之后在记录这个问题的时候想重现跨域问题,但我把新的配置都注释掉,发现还是没有出现问题,很郁闷呀,重启服务,清理页面缓存后都没出现。这个问题知道的话,也欢迎留言。