欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot解决跨域和集成springsecurity解决跨域

程序员文章站 2022-07-10 10:18:46
...

1:什么是跨域:

跨域问题是由于浏览器的同源策略造成的。就是浏览器不能请求不同域的资源

springboot解决跨域和集成springsecurity解决跨域
协议,IP,端口,任意一个不一样,就会被浏览器的同源策略限制,引发跨域的问题

2:解决跨域问题

2.1:前端解决方法,

        HTML的script标签可以加载另外一个域下边的脚本
        HTML的link标签可以加载另外外一个域下边的css
        HTML的img标签,可以加载另外一个域下边的图片
        HTML的iframe标签,可以加载另外一个域的页面,对于使用jsp,freemarker开发的项目,这个是实现跨越访问最常用的方法

2.2:使用代理:

就是在不同的域资源前边,添加一个代理服务器,浏览器通过这个代理服务器访问不同的域资源。这个就符合同源策略,因为浏览器始终都是在访问同一个域
springboot解决跨域和集成springsecurity解决跨域

2.3 cors:跨站访问的设置(设置请求头信息)

springboot解决跨域和集成springsecurity解决跨域

2.3.1

springboot解决跨域和集成springsecurity解决跨域

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中都是全局配置,还有局部配置,就是某一个方法或者某一个类支持跨域访问

springboot解决跨域和集成springsecurity解决跨域

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;
}