springboot解决跨域和集成springsecurity解决跨域
程序员文章站
2022-07-10 10:18:46
...
1:什么是跨域:
跨域问题是由于浏览器的同源策略造成的。就是浏览器不能请求不同域的资源
协议,IP,端口,任意一个不一样,就会被浏览器的同源策略限制,引发跨域的问题
2:解决跨域问题
2.1:前端解决方法,
HTML的script标签可以加载另外一个域下边的脚本
HTML的link标签可以加载另外外一个域下边的css
HTML的img标签,可以加载另外一个域下边的图片
HTML的iframe标签,可以加载另外一个域的页面,对于使用jsp,freemarker开发的项目,这个是实现跨越访问最常用的方法
2.2:使用代理:
就是在不同的域资源前边,添加一个代理服务器,浏览器通过这个代理服务器访问不同的域资源。这个就符合同源策略,因为浏览器始终都是在访问同一个域
2.3 cors:跨站访问的设置(设置请求头信息)
2.3.1
2.3.2
@Configuration
public class GlobalCorsConfig {
@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("*")
//允许的访问URL地址
//.allowedOrigins("http://localhost:8080")
//暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
.exposedHeaders("Header1", "Header2");
}
};
}
}
2.3.3:以上两种方式在springboot中都是全局配置,还有局部配置,就是某一个方法或者某一个类支持跨域访问
3:springboot集成springsecurity解决跨域访问
3.1:首先要开启cors跨站配置
http.cors();
需要说明是,在springsecurity环境下,添加上边的开关,上边的三种配置也是可以生效的,但是springsecurity推荐的还是下边这种方式。
3.2:然后进行配置(springsecurity推荐的配置方式)
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
// 配置那些域可以跨站请求资源
configuration.setAllowedOrigins(Arrays.asList("http://localhost:8888"));
// 配置支持的方法
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
configuration.applyPermitDefaultValues();
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
上一篇: CentOS7配置Java环境
下一篇: 使用mockjs 随机生成模拟接口数据