zoukankan      html  css  js  c++  java
  • CORS解决跨域问题(403问题)

    1、什么是跨域问题?

      跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是用当前页同域名同端口的路径,这能有效的阻止跨站攻击。

    2、跨域问题出现的条件:

      1、跨域问题是ajax请求特有的问题。

         2、前后端的域名、端口不一致。

    3、CORS跨域解决原理简单分析:

      CORS需要浏览器和服务器的同时支持。

      浏览器端(浏览器自动完成):

        发送两次请求,第一次发送option请求 --询问服务器端是否可以跨域;

        第二次才发送正式请求。

      服务器端:

        通过拦截器/过滤器统一实现,过滤器过滤所有的请求,匹配对应的ip+端口,如果符合条件,则在响应头中添加允许跨域访问的信息

    4、CORS跨域解决方案:

      1、  在网关中配置一个CORS的跨域过滤器:SpringMVC已经帮我们写好了CORS的跨域过滤器,直接使用即可。

      2、  在网关中创建一个配置文件告诉过滤器允许通过的域名和端口即可。

      在网关中添加如下配置文件即可(springMVC环境下)

    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;
    
    @Configuration
    public class GlobalCorsConfig {
        @Bean
        public CorsFilter corsFilter() {
            //1.添加CORS配置信息
            CorsConfiguration config = new CorsConfiguration();
            //1) 允许通过的域,不要写*,否则cookie就无法使用了
            config.addAllowedOrigin("http://127.0.0.1:7001");
            config.addAllowedOrigin("http://localhost:7001");
            //2) 是否发送Cookie信息
            config.setAllowCredentials(true);
            //3) 允许的请求方式
            config.addAllowedMethod("OPTIONS");
            config.addAllowedMethod("HEAD");
            config.addAllowedMethod("GET");
            config.addAllowedMethod("PUT");
            config.addAllowedMethod("POST");
            config.addAllowedMethod("DELETE");
            config.addAllowedMethod("PATCH");
            // 4)允许的头信息
            config.addAllowedHeader("*");
            //2.添加映射路径,我们拦截一切请求
            UrlBasedCorsConfigurationSource configSource = new
                    UrlBasedCorsConfigurationSource();
            configSource.registerCorsConfiguration("/**", config);
            //3.返回新的CorsFilter.
            return new CorsFilter(configSource);
        }
    }
  • 相关阅读:
    Scala Partial Function从官方文档解析
    Scala Option 从官方DOC解析
    Scala Nothing 从官方DOC翻译
    从HTTP request的body中拿到JSON并反序列化为一个对象
    将一个大文件分割成若干个小文件,每个文件最多10万行
    java 可变长度参数列表
    java Class类的用法示例
    java String int转换的不同方法
    转载:大公司与小公司的比较
    java 判断5张牌的组成
  • 原文地址:https://www.cnblogs.com/wanghj-15/p/11374190.html
Copyright © 2011-2022 走看看